2009-05-08 6 views
0

Im Moment versuche ich eine Visual C++ - Anwendung auf Linux portieren. Der Code kompiliert ohne Fehler in Visual Studio, aber ich bekomme viele Compiler-Fehler unter Linux Einer dieser Fehler ist.wxwidgets // g ++ Compiler-Fehler: keine passende Funktion für den Aufruf von 'Operator new (..'

../src/wktools4.cpp:29: error: no matching function for 
call to 'operator new(unsigned int, const char[40], int)' 

Weitere Informationen:

  • IDE: kdevelop mit G ++
  • GUI-API:

Der Fehler erscheint bei der folgenden Zeile:

IMPLEMENT_APP(Cwktools4App) 

und einige andere Linien.

Was fehlt mir?

+0

Womit erweitert sich das IMPLEMENT_APP-Makro? Es hilft, die Ausgabe aus dem Präprozessor auszugeben, um Fehler in der Kompilierungszeit innerhalb von Makros zu finden. –

+0

passiert es auch mit z.B. "frame = new Cwktools4Frame;". – mspoerr

Antwort

1

fand ich den Fehler:

#ifdef __WXDEBUG__ 
#define new WXDEBUG_NEW 
#endif 

Wenn ich diese Zeilen zu entfernen, ich habe nicht die Fehler nicht mehr. Der Code wurde von einem Wxwidgets-Assistenten für VisualStudio generiert. Ich habe keine Ahnung, was es tut ...

Vielen Dank für Ihre Hilfe! Jetzt muss ich die Linkerfehler beheben;)

1

Es scheint, dass Ihre Visual C++ - Anwendung operator new() überlastet ist.

Dies wird oft getan (mit den zusätzlichen Parametern, die Sie sehen), um Debugging und andere Analyse-Informationen zu jeder Speicherzuweisung hinzuzufügen.

Da Sie den Fehler mit etwas so einfachen wie frame = new Cwktools4Frame; bekommen empfehle ich für Makros oder Compiler-Ebene definiert suchen, die „neuen“ als etwas anderes neu definieren. Der erste zu suchende Ort sollte Debug-spezifische Builds sein.

+0

Ich benutze keinen überladenen neuen Operator. Vielleicht in einer dritten Partei lib (wxwidgets?) Tun sie dies. Wie kann ich das finden/lösen? – mspoerr

+0

Kompilieren Sie die fehlerhafte Datei erneut mit einem "-E" -Argument (gcc). Dadurch wird ausgegeben, wie der Code aussieht, nachdem der Präprozessor seinen Durchlauf ausgeführt hat und alle Makros erweitert werden. –