Atlanx
Mitglied
Hallo, ich hab hier ein kleines Problem mit meinem Linker.
Ich hab mir eine Streamklasse geschrieben um damit von meinem (GUI)Programm Debugmeldungen in einer Konsole ausgeben zu können.
Jetzt bekomme ich aber einen Linkerfehler, wenn ich das conout-Objekt in meinem Hauptprogramm(Unit1.cpp) und gleichzeitig in meiner Klassendatei(igl3d.cpp) verwende.
Ich dachte eigentlich, dass sich das mit 'extern' lösen liese, aber anscheinend nicht.
Aktuell sieht es so aus:
Unit1.cpp
IGL3D.cpp
Damit kann ich in beiden Dateien mit
etwas in die Konsole schreiben.
p.s. Die Headerdatei von consolestream.h ist natürlich mit #ifdef vor mehrfacheinbindung geschützt:
Ich hab mir eine Streamklasse geschrieben um damit von meinem (GUI)Programm Debugmeldungen in einer Konsole ausgeben zu können.
Jetzt bekomme ich aber einen Linkerfehler, wenn ich das conout-Objekt in meinem Hauptprogramm(Unit1.cpp) und gleichzeitig in meiner Klassendatei(igl3d.cpp) verwende.
Code:
[Linker Warning] Public symbol '_conout' defined in both module D:\...\UNIT1.OBJ and D:\...\IGL3D.OBJ
Ich dachte eigentlich, dass sich das mit 'extern' lösen liese, aber anscheinend nicht.
Aktuell sieht es so aus:
Unit1.cpp
Code:
#include "consolestream.h" // for console
consoleStream conout(0); // defined in Unit1.cpp
IGL3D.cpp
Code:
#include "consolestream.h" // for console
extern consoleStream conout(0); // defined in Unit1.cpp
Damit kann ich in beiden Dateien mit
Code:
conout << "test" << endl;
etwas in die Konsole schreiben.
p.s. Die Headerdatei von consolestream.h ist natürlich mit #ifdef vor mehrfacheinbindung geschützt:
Code:
#ifndef __CONSOLE_STREAM__
#define __CONSOLE_STREAM__
#include <vcl.h>
#pragma hdrstop
#include <streambuf>
#include <ostream>
#include <string>
// stream functions
std::ostream& operator << (std::ostream& ostr, std::string& sstr);
// consoleStreambuf
class consoleStreambuf : public std::streambuf {
public:
consoleStreambuf(int iBuffersize=255);
virtual ~consoleStreambuf();
private:
void WriteCharToConsole(int);
void WriteToConsole();
void DeleteConsole();
void CreateConsole();
HANDLE hConsoleOut;
char* pReserve;
protected:
int_type overflow(int_type);
int_type sync();
};
// consoleStream
class consoleStream : public std::ostream {
public:
consoleStream();
consoleStream(int);
virtual ~consoleStream();
};
#endif