000
06.07.2004, 16:26 Uhr
faulpelz2
|
Hallo,
ich erstelle momentan eine Erweiterung der Bibliothek OpenSG, wobei eine andere Bibliothek, die Meshlib, angebunden wird. Die Klassen von OpenSG sind im Namespace osg:: definiert, die der Meshlib in keinem. OpenSG wird gewöhnlich mit dem Kommando using namespace osg; eingebunden. Beide Bibliotheken beinhalten die Klasse Vec3f. Dem GCC macht dies nix aus, der Compiler von Visual Studio .NET 2003 hat hiermit aber so seine Probleme: Obwohl meine Erweiterung die Klasse Vec3f nicht benutzt, wird sie angekreidet - die Fehlermeldung habe ich unten angehängt.
Mein erster Lösungsversuch war, in meinem Testprogramm um die Header der Meshlib herum einen Namespace zu legen. Das hat aber nicht geklappt. Entstandene Fehlermeldungen noch weiter unten.
Wie kann ich das Problem lösen, ohne - auf using namespace osg; zu verzichten oder - die Klasse Vec3f in der Meshlib komplett umzubenennen?
Gruß, Björn
C++: |
"/cygdrive/c/Programme/Microsoft Visual Studio .NET 2003/Vc7/bin/cl.exe" -c -w44049 -w44065 -w44251 -w44275 -w44099 -w44250 -w44231 -w44290 -DWIN32 -D_WINDOWS -DWINVER=0x0400 -D_WIN32_WINDOWS=0x0410 -D_WIN32_WINNT=0x0400 -D_OSG_HAVE_CONFIGURED_H_ -DOSG_BUILD_DLL -GX -Gi- -FD -GR -Zm1200 -ZI -Od -GZ -D_DEBUG -MDd -DOSG_WITH_GLUT -DOSG_WITH_TIF -DOSG_WITH_JPG -DOSG_WITH_PNG -DOSG_WITH_GIF -I"d:\projekte\cpp\extern\include" -I"d:\projekte\cpp\extern\include" -I"d:\projekte\cpp\extern\include" -I"c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include" -I"d:\projekte\cpp\extern\include" -I"D:\cygwin\usr\local/include" -I"../Meshlib" -I"." -DOSG_LIB_DLLMAPPING= -DWITH_OPENGL test.cpp -Fotest.obj test.cpp d:\projekte\cpp\Meshlib\Meshlib\polygon.hpp(210) : error C2872: 'Vec3f': Mehrdeutiges Symbol kann 'd:\projekte\cpp\Meshlib\Meshlib\vec3.hpp(38) sein: Vec3f' oder 'd:\cygwin\usr\local\include\OpenSG\OSGVector.h(865): osg::Vec3f' d:\projekte\cpp\Meshlib\Meshlib\polygon.hpp(176): Bei der Kompilierung der Memberfunktion 'void PolygonNormal<Iterator>::computeNormal(const Iterator &,Vec3f &,Iterator (&)[3],Iterator (&)[3],double (&)[3],double (&)[3],unsigned int &,unsigned int &)' der Klassenvorlage with [ Iterator=IfsIterator ] d:\projekte\cpp\Meshlib\Meshlib\mesh-ifs.hpp(179): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'PolygonNormal<Iterator>' with [ Iterator=IfsIterator ] d:\projekte\cpp\Meshlib\Meshlib\polygon.hpp(212) : error C2872: 'Vec3f': Mehrdeutiges Symbol kann 'd:\projekte\cpp\Meshlib\Meshlib\vec3.hpp(38) sein: Vec3f' oder 'd:\cygwin\usr\local\include\OpenSG\OSGVector.h(865): osg::Vec3f' d:\projekte\cpp\Meshlib\Meshlib\polygon.hpp(214) : error C2872: 'Vec3f': Mehrdeutiges Symbol kann 'd:\projekte\cpp\Meshlib\Meshlib\vec3.hpp(38) sein: Vec3f' oder 'd:\cygwin\usr\local\include\OpenSG\OSGVector.h(865): osg::Vec3f' d:\projekte\cpp\Meshlib\Meshlib\polygon.hpp(216) : error C2872: 'Vec3f': Mehrdeutiges Symbol kann 'd:\projekte\cpp\Meshlib\Meshlib\vec3.hpp(38) sein: Vec3f' oder 'd:\cygwin\usr\local\include\OpenSG\OSGVector.h(865): osg::Vec3f'
|
Nachdem ich dieses Codestück verwende: namespace Meshlib { #include "meshlib-header" };
entsteht dies:
C++: |
"/cygdrive/c/Programme/Microsoft Visual Studio .NET 2003/Vc7/bin/cl.exe" -c -w44049 -w44065 -w44251 -w44275 -w44099 -w44250 -w44231 -w44290 -DWIN32 -D_WINDOWS -DWINVER=0x0400 -D_WIN32_WINDOWS=0x0410 -D_WIN32_WINNT=0x0400 -D_OSG_HAVE_CONFIGURED_H_ -DOSG_BUILD_DLL -GX -Gi- -FD -GR -Zm1200 -ZI -Od -GZ -D_DEBUG -MDd -DOSG_WITH_GLUT -DOSG_WITH_TIF -DOSG_WITH_JPG -DOSG_WITH_PNG -DOSG_WITH_GIF -I"d:\projekte\cpp\extern\include" -I"d:\projekte\cpp\extern\include" -I"d:\projekte\cpp\extern\include" -I"c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include" -I"d:\projekte\cpp\extern\include" -I"D:\cygwin\usr\local/include" -I"../Meshlib" -I"." -DOSG_LIB_DLLMAPPING= -DWITH_OPENGL test.cpp -Fotest.obj test.cpp d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(51) : error C2079: 'buffer' verwendet undefiniertes class 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(51): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(51): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(52) : warning C4552: '<<': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(53) : error C2228: Der linke Teil von '.str' muss eine Klasse/Struktur/Union sein Typ ist 'int' d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(58) : error C2079: 'buffer' verwendet undefiniertes class 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(58): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(58): Siehe Verweis auf Instanziierung der kompilierten Klassenvorlage 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' with [ _Elem=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char> ] d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(59) : error C2297: '<<': Ungltig, da der rechte Operand vom Typ 'double' ist d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(59) : warning C4552: '<<': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartet d:\projekte\cpp\Meshlib\Meshlib\support-float.hpp(60) : error C2228: Der linke Teil von '.str' muss eine Klasse/Struktur/Union sein Typ ist 'int' c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\ctime(17) : error C2039: 'clock_t': Ist kein Element von 'operator``global namespace''' c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\ctime(17) : error C2873: 'clock_t': Das Symbol kann nicht in einer using-Deklaration verwendet werden c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\ctime(19) : error C2039: 'asctime': Ist kein Element von 'operator``global namespace''' c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\ctime(19) : error C2873: 'asctime': Das Symbol kann nicht in einer using-Deklaration verwendet werden
|
usw. (abgekürzt, weil nicht alles in diese Nachricht passte). Dieser Post wurde am 06.07.2004 um 16:27 Uhr von faulpelz2 editiert. |