Mehrfach Deklaration?



  • Hallo Leute,

    ich habe hier ein recht simples Programm, bestehend aus drei Dateien:

    Und zwar erstens Unit1.cpp:

    #include <iostream>
    #include <conio.h>
    #include "board.h"   //<-- Hier ist die Klasse Board vereinbart
    #include "header.h"  //<-- Da sollen Methoden wie Intro oder Outro sowie eine Instanz der Klasse "Board" vereinbart werden
    #include "K8055D.h"  //<-- Die gehört zu einer DLL Datei, ist nicht von mir...
    //-----------------------------------------------------------------
    using namespace std;
    //-----------------------------------------------------------------
    int main (void) {
            intro();
    
            outro();
            return 0;
    }
    

    Die Vereinbarung der Klasse Board in der Datei board.h:

    #include "K8055D.h"
    //-----------------------------------------------------------------
    using namespace std;
    //-----------------------------------------------------------------
    class Board {
            private:
                    //Variablen
                    bool connected;
            public:
                    //Methoden
                    bool connect();
                    [...]
                    Board(); //Konstruktor
    };
    //-----------------------------------------------------------------
    //Setzt die Variablen auf ihre Startwerte
    Board::Board() {
            //Variablen auf Startwert setzen
            this->connected = false;
    }
    //-----------------------------------------------------------------
    bool Board::connect() {
       [...]
    

    Und die Header Datei header.h:

    using namespace std;
    //-----------------------------------------------------------------
    //Objekt wird vereinbart
    Board MeinBoard = Board();
    MeinBoard.connect();
    //-----------------------------------------------------------------
    void intro() {
            [...]
    

    Ich ernte folgende Fehlermeldungen:

    [C++ Fehler] header.h(5): E2238 Bezeichner 'MeinBoard' mehrfach deklariert
    [C++ Fehler] header.h(4): E2344 'MeinBoard' bereits deklariert
    [C++ Fehler] header.h(5): E2141 Fehler in der Deklarationssyntax
    

    Ich habe keine Ahnung wo ich "MeinBoard" schon einmal deklariert haben sollte. Wenn ich diese beiden Deklarationszeilen in der Datei "header.h" einfach lösche, bekomme ich die Fehlermeldung "MeinBoard" sei ein undefiniertes Symbohl.

    Das ulkige: Wenn ich diese Deklaration in der main ausführe klappt alles, nur kennt die Datei header.h dann meine Instanz nicht und kann sie somit nicht benutzen...

    Wäre nett wenn ihr mir helfen könntet, ich probiere schon den ganzen Tag dran herum...



  • komisch.. ich habe einfach mal nen paar Programmzeilen hin und her verschoben und jetzt klappt es.. 😕 😕

    Naja, immerhin ist jetzt wieder alles in Ordnung 🙂

    Trotzdem vielen Dank!



  • header werden einfach a la copy & paste an die stelle kopiert an der du include schreibst

    d.h.

    #include "header.h"
    #include "header.h"
    

    führt schon zu einer mehrfachdeklaration

    deswegen verwendet man das konstrukt

    #ifndef BLABLA_H
    #define BLABLA_H
    ...
    ...
    #endif
    

    um sicherzugehn, dass der header nur einmal eingebunden wird

    wenn du allerdings mehrere cpp dateien hast und in jeder den header
    einbindest wird dir der linker was von nem doppelten symbol erzähln

    das liegt daran, dass jede cpp erst unabhängig voneinander übersetzt wird
    und zum schluss baut der linker das ganze zusammen

    desshalb solltest du variablen immer in einer cpp datei deklariern
    und im header nur einen verweis verwenden

    in etwa so

    a.h
    extern Board MeinBoard;
    a.cpp
    Board MeinBoard;
    b.cpp
    #include "a.h"
    

Anmelden zum Antworten