www.mikrocontroller.net

Forum: PC-Programmierung MFC DEBUG_NEW verursacht Kompiler-Fehler


Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
Jetzt habe ich eine Klasse, die als Member eine
std::deque<MyObject*> m_Objects 
 hat. Wenn ich diese Zeile in dem Header-File schreibe bekomme ich 
folgenden Kompiler-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>        ]

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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.