Forum: PC-Programmierung MFC DEBUG_NEW verursacht Kompiler-Fehler


von Ampfing (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein MFC-Projekt, in dem ich gerade auf einen tollen Fehler 
gestoßen bin, den ich mir nicht erklären kann.
Ich habe im vorkompilierten Header folgendes stehen:
1
#ifdef _DEBUG
2
#define new DEBUG_NEW
3
#endif
Jetzt habe ich eine Klasse, die als Member eine
1
std::deque<MyObject*> m_Objects
 hat. Wenn ich diese Zeile in dem Header-File schreibe bekomme ich 
folgenden Kompiler-Fehler:
1
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.
2
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
3
1>        d:\program files\microsoft visual studio 9.0\vc\include\new.h(93): oder "void *operator new(size_t,void *)"
4
1>        bei Anpassung der Argumentliste '(const char [64], int)'
5
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 *)".
6
1>        with
7
1>        [
8
1>            _Ty=char
9
1>        ]
10
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
11
1>        with
12
1>        [
13
1>            _Ty=char
14
1>        ]
15
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>".
16
1>        with
17
1>        [
18
1>            _Ty=char
19
1>        ]
20
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>".
21
1>        with
22
1>        [
23
1>            _Ty=char,
24
1>            _Alloc=std::allocator<char>
25
1>        ]
26
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>".
27
1>        with
28
1>        [
29
1>            _Elem=char,
30
1>            _Traits=std::char_traits<char>,
31
1>            _Ax=std::allocator<char>
32
1>        ]

Wieso passiert das? Wenn ich den #define new DEBUG_NEW rausnehme 
kompiliert alles fehlerfrei - allerdings habe ich dann eben die 
Überprüfung von DEBUG_NEW nicht mehr überall im Projekt...
Gibt es eine Möglichkeit DEBUG_NEW und eine deque zu nutzen?

Vielen Dank vorab für Eure Hilfe

von Εrnst B. (ernst)


Lesenswert?

Bin jetzt kein VC Profi, aber vielleicht:

dein DEFINE steht ganz ganz oben? vor allen includes etc? und auch in 
ALLEN deinen Quelltext-files?
Und dann eventuell die precompiled-headers abschalten... wenn die ohne 
dein #define vorcompiliert wurden, gehn die natürlich nachher nichtmehr 
mit dem #define drinnen.

von Ampfing (Gast)


Lesenswert?

Hi,

nein, mein DEFINE steht nicht ganz ganz oben, das geht aber auch nicht.
Es steht in der stdafx.h (die von allen Dateien als erster Header 
angezogen wird und über die stdafx.cpp als vorkompilierter Header 
erstellt wird).
Da habe ich gerade mal mit der Position herumgespielt. Egal wo ich es 
hin setze, entweder kennt er DEBUG_NEW noch nicht (vor dem include von 
<afxext.h>), oder es kommt der oben angesprochene Kompiler-Fehler...

Ausschalten möchte ich die vorkompilierten Header eigentlich nicht, 
sonst muss ich überall alles includen...

Gruß

von Ampfing (Gast)


Lesenswert?

Guten Morgen zusammen,

ich habe die Lösung - mit Hilfe des c-plusplus.de-Forums mittlerweile 
gefunden.
Wen es interessiert: DEBUG_NEW ist nicht mit der STL kompatibel. Das 
heißt, DEBUG_NEW darf erst definiert werden, nachdem die STL-Header (in 
meinem Fall deque und algorithm) included sind.

Gruß

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.