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 DeklarationssyntaxIch 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 ... ... #endifum 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ählndas liegt daran, dass jede cpp erst unabhängig voneinander übersetzt wird
und zum schluss baut der linker das ganze zusammendesshalb solltest du variablen immer in einer cpp datei deklariern
und im header nur einen verweis verwendenin etwa so
a.h extern Board MeinBoard; a.cpp Board MeinBoard; b.cpp #include "a.h"