Avatar billede ladyhawke Novice
28. november 2002 - 15:10 Der 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...
Avatar billede jpk Nybegynder
28. november 2002 - 15:15 #1
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);
Avatar billede ladyhawke Novice
28. november 2002 - 15:18 #2
jeg har TGuiHandling *GuiHandling; defineret i GuiHandling.cpp filen

GuiHandling->EnableControls(nItem); kaldt i MainGuin.cpp, giver følgende fejl:

undefined symbol 'GuiHandling' ...
Avatar billede ladyhawke Novice
28. november 2002 - 15:19 #3
MainGuin -> MainGui
Avatar billede jpk Nybegynder
28. november 2002 - 15:20 #4
Hmm, hvor i .cpp-filen?
Avatar billede ladyhawke Novice
28. november 2002 - 15:24 #5
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...)
Avatar billede ladyhawke Novice
28. november 2002 - 15:25 #6
jeg er nødt til at forlade computeren nu, jeg kigger i morgen...

Måske en lille vejledning (pseudokode) til hvordan det bør gøres?
Avatar billede jpk Nybegynder
28. november 2002 - 15:25 #7
Du erklærer altså en pointer, men sætter den ikke til at pege på noget..?
Avatar billede mickni33 Nybegynder
28. november 2002 - 16:41 #8
void __fastcall TGuiHandling::EnableControls(int nItem); ???????????

skal den ikke bare skrives som

void __fastcall EnableControls(int nItem);

altså uden  TGuiHandling::
Avatar billede ladyhawke Novice
28. november 2002 - 19:21 #9
jpk>> jahh, det ser sådan ud (har kigget lidt mere på det), synes bare ikke jeg har haft problemer med det før...

mickni33>> måske, jeg kigger på det i morgen...
Avatar billede jpk Nybegynder
29. november 2002 - 08:31 #10
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);
Avatar billede ladyhawke Novice
29. november 2002 - 09:07 #11
Det er denne fejl jeg får...

[C++ Error] MainGui.cpp(306): E2451 Undefined symbol 'GuiHandling'

Så det ser ud til at MainGui.cpp ikke kan "se" GuiHandling klassen, men jeg prøver lige ata lave et objekt af den...
Avatar billede ladyhawke Novice
29. november 2002 - 09:08 #12
hmmm, jeg får samme compiler fejl selvom jeg gør sådan:

TGuiHandling* GuiHandling = new TGuiHandling();
Avatar billede mickni33 Nybegynder
29. november 2002 - 09:08 #13
void __fastcall TGuiHandling::EnableControls(int nItem);
jeg vil stadig sige at det er denne der laver fejlen
der skal stå

void __fastcall EnableControls(int nItem);
Avatar billede ladyhawke Novice
29. november 2002 - 09:14 #14
mickni33>> jeg har lige testet, det har intet at sige. Jeg har andre klasser med metoder der er defineret sådan og det virker fint...
Avatar billede jpk Nybegynder
29. november 2002 - 09:14 #15
Men hvorfor vil du dog lave en global variabel..?
Avatar billede ladyhawke Novice
29. november 2002 - 09:40 #16
Det var egentlig heller ikke nødvendigt, men jeg fandt ud af at der manglede en "extern" erklæring i GuiHandling.h filen...

Nu har jeg ændret det så det er en private member i MainGui filen og den instatieres også der, så det virker nu :o)
Avatar billede ladyhawke Novice
29. november 2002 - 09:41 #17
I har begge været til god hjælp, så jeg deler lige lidt points ud :o)
Avatar billede jpk Nybegynder
29. november 2002 - 10:26 #18
Tusing tak...
Altid en fornøjelse!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester