28. november 2002 - 15:10Der er
16 kommentarer og 2 løsninger
adgang til klasse i anden fil i C++ builder
Jeg har lavet en klasse (i GuiHandling.h og GuiHandling.cpp fil): class TGuiHandling { public: // User declarations __fastcall TGuiHandling(); void __fastcall TGuiHandling::EnableControls(int nItem); };
Hvordan kalder jeg EnableControls i mit hovedprogram (filen MainGui.cpp)? Jeg har inkluderet GuiHandling.h i MainGui.cpp...
Hvis du har et objekt af typen, kan du naturligvis kalde den derpå. Ellers, hvis det er muligt, kan du lave den som en static metode og så kalde: TGuiHandling::EnableControls(myVal);
GuiHandling->EnableControls(nItem); kaldes i en metode i MainGui.cpp, efter include...
TGuiHandling *GuiHandling er defineret øverst i GuiHandling.cpp (får ingen compiler fejl på det (hvis jeg fjerner "GuiHandling->EnableControls(nItem); " kompileres uden fejl...)
Du får naturligvis ikke compilerfejl ved at erklære en pointer (TGuiHandling *GuiHandling;), men du skal da sætte den til at pege på et objekt før du kan kalde metoder på den!
TGuiHandling* pGuiHandling = new TGuiHandling(); pGuiHandling->BlaBla(...);
Når du erklærer en pointer, uden for en klasse, bør du, såfremt du ikke med det samme sætter den til at pege på et objekt, initialisere den til NULL!
TGuiHandling* pGuiHandling = NULL;
Derved opdager du lettere fejl, hvor du prøver at kalde metoder via pointeren. "uinitialiserede variable er roden til alt ondt".
Du skriver, at du får en compilerfejl, hvilken?
Hvis du har mulighed for det (hvis din funktionalitet i funktionen tillader det), kan du lave din funktion static, hvilket medfører, at du ikke behøver et objekt at kalde metoden på. Desuden fylder det mindre i memory, hvis du har flere instanser af objektet, da de "deler" funktionen. Så kan du kalde den således: TGuiHandling::EnableControls(myVal);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.