Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Namespace Problem beim VC Compiler

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.07.2004, 16:34 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi, einfach vor alle funktionen, die eben im namespace osg liegen folgendes schreiben:


C++:
  osg::funktion(...)



dann sollte es keine probleme geben (using namespace osg; weglassen!)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.07.2004, 16:46 Uhr
faulpelz2



Hm,

dies wollte ich ja gerade vermeiden, wie ich oben schrieb. Ich kann von einem OpenSG-Benutzer, der meine Erweiterung einbinden soll, nicht erwarten, dass er sich auch die Mühe macht und vor alle Funktionen osg:: schreibt, statt using namespace osg; zu benutzen.

Björn
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.07.2004, 17:53 Uhr
faulpelz2



Noch eine weitere Anmerkung, bezieht sich auf die erste Fehlermeldung:

Die Datei polygon.hpp wird nicht direkt eingebunden! Außerdem wird der Meshlib-Header eingebunden, bevor irgendeiner der OpenSG-Header benutzt wird oder using namespace osg; vorkommt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: