C++ kein Zugriff auf Objekt

Gast #791644
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...
Gast #791646
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...
#791652
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).
Gast #797352
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren