www.mikrocontroller.net

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


Autor: Jou (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Jou (Gast)
Datum:

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

Autor: Εrnst B✶ (ernst)
Datum:

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

Autor: Jou (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Jou (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Der Albi (der-albi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz zusammengefasst: "C" und "Klasse" widersprechen sich.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

void foo( CAuto& car_obj )
{
  int j;

  j = car_obj.baujahr;
}


int main()
{
  CAuto car;

  foo( car );
}


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

Autor: Jou (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit dem "extern" funktioniert auch nicht.

Autor: Michael K. (Gast)
Datum:

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

Grüße,
Michael

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.