Probleme mit STL und Microsoft Visual Studio 2005
-
Hallo zusammen,
ich habe einen netten kleinen Algorithmus in Visual Studio 6 geschrieben, wobei ich die STL von SGI verwendet habe (http://www.sgi.com/tech/stl/). In Visual Studio 6 lief alles einwandfrei und ich bekam keine Fehler beim kompilieren.
Da ich die hash_map und hash in meinem Programm verwende, benötige ich auch weiter diese STL von SGI... da nach meinen Informationen diese nicht in der STL von MS beinhaltet ist. Nun zu meinem Problem... ich bekomme in der folgenden Zeile in der stl_alloc.h:
template <bool __threads, int __inst> typename __default_alloc_template<__threads, __inst>::_Obj* __STL_VOLATILE __default_alloc_template<__threads, __inst> ::_S_free_list[ # if defined(__SUNPRO_CC) || defined(__GNUC__) || defined(__HP_aCC) _NFREELISTS # else __default_alloc_template<__threads, __inst>::_NFREELISTS # endif ] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, };
Die folgenden Fehler:
1> WINVER not defined. Defaulting to 0x0502 (Windows Server 2003)
1>stl_alloc.h(564) : warning C4346: 'std::__default_alloc_template<threads,inst>::_Obj': Abhängiger Name ist kein Typ
1> Präfix mit 'typename' zum Angeben eines Typs
1>stl_alloc.h(564) : error C2143: Syntaxfehler: Es fehlt ';' vor '*'
1>stl_alloc.h(564) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
1>stl_alloc.h(564) : error C2888: '__default_alloc_template<threads,inst>::_Obj _Obj': Symbol kann nicht im Namespace 'std' definiert werden
1>stl_alloc.h(564) : fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
1>Hat da bereits jemand Erfahrung gemacht? Was muss ich ändern bzw. mit welchen anderen Fehlern muss ich noch rechnen
und wie kann ich diese beheben...
Für jede Antwort bedanke ich mich jetzt schonmal...
-
Du bist dem Volksmund in die Falle getappt. Standard ISO-C++ hat keine STL! Die STL ist eine spezielle Librarie, die unabhängig vom Standard entwickelt wird. Fälschlicherweise sagen die meisten Leute, zur Standard-C++-Library auch STL. Was aber eigentlich nicht richtig ist.
Ist die SGI STL auch für den VC8.0 implementiert??? Wenn diese ein paar Tricks benutzt, wird das vielleicht nicht ohne Weiteres laufen. Die SGI STL muß sich schon an den ISO-C++ halten, damit sie im VC8.0 läuft.
Eine Frage: nimmst du die SGI STL nur wegen der Hashmap??? Der MSVC bringt schon eine Hasmap mit, und zwar im Namespace stdext. Such mal in der MSDN nach hash_map oder hash_set oder stdext.
Im std::tr1 gibts auch Hashmaps, aber die werden erst in einem der nächsten MSVC-Versionen dabei sein.
-
Eine Frage: nimmst du die SGI STL nur wegen der Hashmap??? Der MSVC bringt schon eine Hasmap mit, und zwar im Namespace stdext. Such mal in der MSDN nach hash_map oder hash_set oder stdext.
Also ich habe die SGI STL damals für VC 6 genommen weil sie einfach alles geboten hat was ich brauchte... und auch leicht einzubinden war :D...
Nun habe ich jedoch auf VS 2005 umgestellt...
und es läuft nicht mehr
Ich versuche es direkt mal mit stdext...