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ß


  • Mod

    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


Anmelden zum Antworten