Forum: PC-Programmierung C++ kein Zugriff auf Objekt


von Jou (Gast)


Lesenswert?

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?

von Jou (Gast)


Lesenswert?

Ich möchte in einer anderen C-Datei z.B. test_2.c die Variable baujahr 
von der Klasse CAuto auslesen.

von Εrnst B. (ernst)


Lesenswert?

Im Headerfile
"extern CAuto car;" eintragen, dann kannst du auch aus anderen c-Files 
drauf zugreifen.

von Jou (Gast)


Lesenswert?

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...

von Jou (Gast)


Lesenswert?

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...

von Der A. (der-albi)


Lesenswert?

Kurz zusammengefasst: "C" und "Klasse" widersprechen sich.

von Karl H. (kbuchegg)


Lesenswert?

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).

von Jou (Gast)


Lesenswert?

Das mit dem "extern" funktioniert auch nicht.

von Michael K. (Gast)


Lesenswert?

Der kennt die Klasse CAuto nicht. Also den header in der die Klasse 
definiert wurde einbinden!

Grüße,
Michael

von daniel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.