Ik ben bezig met het bouwen van een C++ programma met de Ultimate++ library. Ik heb een hoofdform en een form voor het maken van instellingen. Dit form kan middels een knop op het hoofdform worden geopend. Nu heb ik een class die dient voor het beheren van een aantal instelbare variabelen die opgeslagen worden in een XML file. Dit werkt allemaal prima. De instantie van deze class zit in de hoofdform, omdat de hoofdform altijd open is en er dus geen problemen komen met het vernietigen van de configuratie-class.
Nu wil ik echter de opgeslagen instellingen in de configuratie-class in de instellingenform gebruiken. Ik wil geen dubbele variabelen hebben dus ik wil een pointer naar de bestaande instantie meegeven aan de instellingenform. Dit is een goede oplossing toch? Als ik er compleet naast zit dan zeg het me!
In C# zou ik het zo doen, ik doe het al jaren en het werkt altijd:
Nu zit ik hier in C++ echter met een probleem. De forms zijn geen classes, maar structs. Echter heb ik ze veranderd in classes en mijn idee toegepast. Ik kreeg geen errors maar in de runtime kwam ik meteen een fout tegen. Naar mijn idee is het een memory leak of een corrupte pointer waar ik niet op heb gelet. De code zoals ik het in C++ heb gemaakt zag er zo uit.
Kan iemand me hiermee helpen? Ik doe nog niet zo heel lang C++ en ik ben nog steeds bezig met zo veel mogelijk te leren. Ik heb al veel problemen met pointers gehad wanneer de variabele in kwestie bijvoorbeeld al was vernietigd. Tijdens het debuggen zag ik ook dat de inhoud van een vector<string> in pConfig aangaf: "Unable to read memory". De waardes klopten ook niet. Er klopt dus iets niet in mijn pointer! Ik heb overigens ook de variabele meegegeven als: "ConfigurationStorage pConfig", en "ConfigurationStorage* pConfig". Beide geven foutmeldingen.
Nu wil ik echter de opgeslagen instellingen in de configuratie-class in de instellingenform gebruiken. Ik wil geen dubbele variabelen hebben dus ik wil een pointer naar de bestaande instantie meegeven aan de instellingenform. Dit is een goede oplossing toch? Als ik er compleet naast zit dan zeg het me!
In C# zou ik het zo doen, ik doe het al jaren en het werkt altijd:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class Hoofdform : Form { Configuratieclass mConf; InstellingenForm miForm = new InstellingenForm(mConf); void OpenInstellingen() { miForm.ShowDialog(); } } class InstellingenForm : Form { ConfiguratieClass mConf; InstellingenForm(ConfiguratieClass pConf) { mConf = pConf; } } |
Nu zit ik hier in C++ echter met een probleem. De forms zijn geen classes, maar structs. Echter heb ik ze veranderd in classes en mijn idee toegepast. Ik kreeg geen errors maar in de runtime kwam ik meteen een fout tegen. Naar mijn idee is het een memory leak of een corrupte pointer waar ik niet op heb gelet. De code zoals ik het in C++ heb gemaakt zag er zo uit.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
| struct SettingsDialog : public TopWindow // Dit is de instellingenform die erft van de U++ library { ConfigurationStorage mStor; // lokale variabele is wel nodig anders kan ik de instellingen niet meer opslaan nadat de objecten zijn ingeladen // meer object/functie definities... } SettingsDialog::SettingsDialog(ConfigurationStorage& pConfig) // Dit is de constructor van het instellingenformulier { mStor = pConfig; // objecten uit het pConfig object worden ingeladen, dit zijn strings. Hier krijg ik dus runtime fouten. Meestal zijn het assert fail fouten. } |
Kan iemand me hiermee helpen? Ik doe nog niet zo heel lang C++ en ik ben nog steeds bezig met zo veel mogelijk te leren. Ik heb al veel problemen met pointers gehad wanneer de variabele in kwestie bijvoorbeeld al was vernietigd. Tijdens het debuggen zag ik ook dat de inhoud van een vector<string> in pConfig aangaf: "Unable to read memory". De waardes klopten ook niet. Er klopt dus iets niet in mijn pointer! Ik heb overigens ook de variabele meegegeven als: "ConfigurationStorage pConfig", en "ConfigurationStorage* pConfig". Beide geven foutmeldingen.