DEBUG_NEW führt zu Compiler-Fehler
-
Hallo zusammen,
gleich vorneweg, ich habe auch schon auf mikrocontroller.net gepostet (s. http://www.mikrocontroller.net/topic/159243#new ), hoffe hier aber auch auf Antworten.
Ich habe ein Projekt, bei dem ich im vorkompilierten Header folgende Zeilen habe:
#ifdef _DEBUG #define new DEBUG_NEW #endif
In einer Klasse im Projekt habe ich jetzt eine std::deque<MyObject*>m_Objects. Sobald ich die deque anlege bekomme ich folgenden Compiler-Fehler:
d:\program files\microsoft visual studio 9.0\vc\include\xmemory(43) : error C2665: "operator new": Durch keine der 5 Überladungen konnten alle Argumenttypen konvertiert werden. 1> d:\program files\microsoft visual studio 9.0\vc\include\new.h(85): kann 'void *operator new(size_t,const std::nothrow_t &) throw()' sein 1> d:\program files\microsoft visual studio 9.0\vc\include\new.h(93): oder "void *operator new(size_t,void *)" 1> bei Anpassung der Argumentliste '(const char [64], int)' 1> d:\program files\microsoft visual studio 9.0\vc\include\xmemory(145): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template "_Ty *std::_Allocate<char>(size_t,_Ty *)". 1> with 1> [ 1> _Ty=char 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\xmemory(144): Bei der Kompilierung der Klassen-template der char *std::allocator<_Ty>::allocate(std::allocator<_Ty>::size_type)-Memberfunktion 1> with 1> [ 1> _Ty=char 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\xstring(468): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::allocator<_Ty>". 1> with 1> [ 1> _Ty=char 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\xstring(497): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::_String_val<_Ty,_Alloc>". 1> with 1> [ 1> _Ty=char, 1> _Alloc=std::allocator<char> 1> ] 1> d:\program files\microsoft visual studio 9.0\vc\include\stdexcept(47): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template "std::basic_string<_Elem,_Traits,_Ax>". 1> with 1> [ 1> _Elem=char, 1> _Traits=std::char_traits<char>, 1> _Ax=std::allocator<char> 1> ]
Kommentiere ich den #define new DEBUG_NEW aus funktioniert das Ganze, aber ich habe eben keine Laufzeitüberwachung auf Memory-leaks mehr.
Gibt es eine Möglichkeit (außer in allen Dateien den define zu setzen, in denen ich keine deque verwende) sowohl DEBUG_NEW, als auch deque zu nutzen?Vielen Dank vorab fürs lesen
-
afxwin.h inkludiert?
-
Hi,
jup, der Header wird inkludiert (sonst kennt er new auch gar nicht).
Gruß
-
DEBUG_NEW ist IMHO nicht mit der STL kompatibel. Also nach Möglichkeit DEBUG_NEW erst nach dem include der STL Dateien verwenden.
-
Guten Morgen,
der Hinweis war die Lösung!
Es funktioniert tatsächlich, wenn ich DEBUG_NEW erst definiere, wenn ich die STL-Header herangezogen habe.
Jetzt muss ich halt in der stdafx.h <deque> und <algorithm> includen (und damit sind die auch in allen Projektdateien drin) aber das sollte ja auch nicht weiter stören.Danke für den Tipp und schöne Grüße