#ifndef #define weigern sich - Bin ich bekloppt?!?!?



  • Hallo,
    ich habe ein recht einfaches Programm.
    2 *.cpp Dateien greifen jede auf ein und dieselbe Header-Datei zu. Da beide die gleiche, dort definierte Klasse benötigen, ist mir nichts besseres eingefallen. In besagtem Header steht (unter anderem) folgender Text:

    #ifndef VARIABLEN_H
    #define VARIABLEN_H
    class feld //Definition der Speicherstruktur eines einzelnen Punktes
    {
    public:
    	int id;
    	int x;
    	int y;
    	double z;
    	int empf_feld_id;
    	int entw;
    };
    feld *feldZeiger; //Initialisierung des Zeigers
    #endif
    

    Der Compiler kommentiert das mit

    1>DGM_Analyse.obj : error LNK2005: "class feld * feldZeiger" (?feldZeiger@@3PAVfeld@@A) ist bereits in Main.obj definiert.

    Ich führe das darauf zurück, dass hier irgendwas mit mit #ifndef nicht klappt, denn in DGM_Analyse, der fehlerproduzierenden Datei, wird (naürlich) kein class feld*feldZeiger (abgesehen vom Header) mehr definiert.
    Falls noch mehr Code benötigt wird, kann ich den gerne zur Verfügung stellen.
    Danke und Grüße



  • Include Guards schuetzen vor multiplen Definitionen innerhalb einer Uebersetzungs Einheit. Du hast aber ein Problem mit der One Definition Rule.

    Die Loesung ist feld *feldZeiger; aus der header Datei in eine Implementierungsdatei (.cpp Datei) zu ziehen und im Header nur die Deklaration stehen zu lassen:

    exten feld *feldZeiger;
    


  • Vielen dank, werde ich mich im Laufe des Sonntags mit auseinandersetzen 🙂


Anmelden zum Antworten