Wie kann man in C++ auf ein Objekt zugreifen, das zuvor angelegt wurde? Beispie: // C-Datei test_1.c CAuto car; car.baujahr = 2000; // C-Datei test_2.c wie kann man hier auf die Variable baujahr von der Klasse CAuto zugreifen?
Ich möchte in einer anderen C-Datei z.B. test_2.c die Variable baujahr von der Klasse CAuto auslesen.
Im Headerfile "extern CAuto car;" eintragen, dann kannst du auch aus anderen c-Files drauf zugreifen.
In der C-Datei "test_2.c" habe ich "extern CAuto car" eingefügt. Es erscheint trotz allem folgende Fehlermeldung: Generieren von Code... Linker-Vorgang läuft... user.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class CAuto histo_obj" (?car@@3VCAuto@@A) Debug/GDE_3.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe. Browse-Informationsdatei wird erstellt...
Fehlermeldung: Generieren von Code... Linker-Vorgang läuft... user.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class CAuto car" (?car@@3VCAuto@@A) Debug/GDE_3.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise Fehler beim Ausführen von link.exe. Browse-Informationsdatei wird erstellt...
Jou wrote: > In der C-Datei "test_2.c" habe ich "extern CAuto car" eingefügt. > Es erscheint trotz allem folgende Fehlermeldung: > > Generieren von Code... > Linker-Vorgang läuft... > user.obj : error LNK2001: Nichtaufgeloestes externes Symbol "class CAuto > histo_obj" (?car@@3VCAuto@@A) Logich. Du hast ja nicht i = car.baujahr; geschrieben, sondern i = histo_obj.baujahr; Die Objekte müssen schon gleich heissen. Im übrigen ist es ziemlicher Mist, hier mit globalen Objekten zu arbeiten. Übergib einfach das Objekt an die Funktion die es benötigt und gut ists.
1 | void foo( CAuto& car_obj ) |
2 | {
|
3 | int j; |
4 | |
5 | j = car_obj.baujahr; |
6 | }
|
7 | |
8 | |
9 | int main() |
10 | {
|
11 | CAuto car; |
12 | |
13 | foo( car ); |
14 | }
|
Auch wenn globale Variablen in der µC-Programmiererei nicht zu vermeiden sind, so sollte man sich das bei der Programmierung auf einem größeren System nicht einreissen lassen. Globale Objekte sind ein Ausdruck von schlechtem Design (auch wenn jetzt einige wieder matschkern werden).
Der kennt die Klasse CAuto nicht. Also den header in der die Klasse definiert wurde einbinden! Grüße, Michael
Jou ich weiss nicht mit welcher umgebung du arbeitest der grund für link error ist, dass der linker eben nicht object datei mit deinem objekt findet. kleines schema --a.cpp int x; // global =>a.o --b.cpp extern int x; // global verfügbar um b.o zu erstellen lautet compiler aufruf g++ -c b.cpp a.o schaue dir nützliche compiler optionen an und gewöhne es dir am besten an wenigstens -Wall zu benutzen das ist der grund für den link error wie du deiner entwicklungsumgebung beibringst wo sie nach libs und .o-s sucht, musst du nu selber herausfinden grüsse, daniel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.