extern struct

burgermac

Grünschnabel
Hallo Community,

ich hab folgendes Problem in c++:
ich habe mehrere .cpp dateien und 3 davon müssen auf eine Header Datei zugreifen, in der sich ein struct mit 2 float Variablen befindet

#ifndef datenh_h
#define datenh_h

using namespace std;

struct daten{
float var1;
float var2;} dat}


#endif

So, wenn ich diese Header jetzt in die .cpp Dateien mit #include "datenh.h" einbinde bekomm ich für jede cpp Datei die auf die Header zugreift die Fehlermeldung:
error LNK2005: "struct daten dat" (?dat@@3Udaten@@A) ist bereits in 2projekt.obj definiert.
...2projekt.cpp ist eine von den cpp datein die diese Variablen brauchen.

und die Fehlermeldung

"Mindestens ein mehrfach definiertes Symbol gefunden."

Wie schaffe ich, dass die Fehlermeldung vermieden wird, bzw was bedeutet sie?

Wenn ich anstelle der struct normale Variablen nehme, sie nur in die haupt cpp datei einbinde und alle weiteren cpp-Dateien auf diese Variablen via extern float var1... zugreifen , geht es, leider klappt der "extern" befehl für meine struct variablen irgendwie nicht.
 
Hi und Willkommen bei tutorials.de :)

Zuerst einmal: Bitte verwende in Zukunft die Codetags für Codeteile.
Für C und C++: [code=cpp]...[/code]

Und das "}" hinter dem dat ist hoffentlich in Wirklichkeit ein ";", oder?

Zum eigentlichen Problem: Du mischt hier zwei Sachen.
Einerseits legst du fest, wie die Struktur daten auszusehen hat (mit den zwei floats drinnen).
Das ist OK.

Andererseits legst du in der Headerdatei auch gleich eine Variable dat an.
Und das gehört aus der Headerdatei raus.
Weil du diese eine Variable ja in mehreren cpp-Dateien verwenden willst, musst du
1) dat in der Headerdatei mit extern anlegen.
Also das
C++:
struct daten
{
    float var1;
    float var2;
} dat;
könnte man zuerst auch so schreiben:
C++:
struct daten
{
    float var1;
    float var2;
};
daten dat;
Und da kommt jetzt ein extern wie folgt dazu:
C++:
struct daten
{
    float var1;
    float var2;
};
extern daten dat;

2) legst du in einer (nur einer) cpp-Datei die Variable wirklich an, also einfach mit "daten dat", ohne extern.

Gruß
 
Danke, scheint zu funktionieren, habs "daten dat;" jetzt nur einmal vor der int main() global angelegt. Danke für die schnelle Hilfe******
 
Zurück