C++: ofstream mehrfach definiert
-
Hi,
ich habe ein kleines (Verständnis-?)Problem mit dem ofstream in C++.
Ich habe ein Programm geschrieben, welches aus mehreren Einzeldateien besteht. In jeder dieser Datei will ich den ofstream verwenden (es soll immer in die gleiche datei geschrieben werden). Beim Erstellen bekomme ich dann die Fehlermeldung:test.obj : error LNK2005: "class std::basic_ofstream<char,struct std::char_traits<char> > fileout" (?fileout@@3V?$basic_ofstream@DU?$char_traits@D@std@@@std@@A) ist bereits in main.obj definiert fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.Anscheinend mache ich da irgendeinen Fehler, auf den ich nicht von selbst kommen will. Der ofstream "fileout" ist eigentlich nur in "main.h" definiert (welches über #ifndef durch mehrfaches Einbinden abgesichert ist), in test.cpp soll er dann in einer show-Funktion verwendet werden, ebenso in der main.cpp. (In welcher Datei muss denn dann der ofstream stehen? das passt bei mir anscheinend nicht).
Über Hilfe wäre ich sehr dankbar
Hier das Programm:
main.cpp
#include "Ctest.h" void main(void) { cout << "Test" << endl; fileout << "Test" << endl; }main.h
#ifndef main_h #define main_h #include <iostream> #include <fstream> using namespace std; ofstream fileout("output.txt"); #endiftest.cpp
#include "Ctest.h" ctest::ctest() { out = 3; } ctest::~ctest() {} void ctest::show() { fileout << out << endl; }test.h
#ifndef test_h #define test_h #include "main.h" class ctest { private: int out; public: ctest(); ~ctest(); void show(); }; #endifVielen Dank!

-
Niemals Sachen mit externer Bindung in Headern definieren. Du suchst wahrscheinlich
extern. Der Sinn eines globalen Streams ist natürlich trotzdem sehr sehr zweifelhaft.using namespace in Headern ist auch Stiltodsünde, ebenso fehlende Includeguards.