2009-07-22 7 views
3

Ich habe eine Anwendung mit dem Parameter -std = gnu ++ 0x in tdm-mingw g ++ 4.4.0 unter Windows erstellt.fstream Linkfehler in g ++ mit -std = gnu ++ 0x

Es wird mit einem ofstream Objekt und wenn ich bauen will, gibt es die folgenden Verknüpfungsfehler:

c:\opt\Noddler/main_func.cpp:43: undefined reference to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::string const&, std::_Ios_Openmode)' 

Es richtig baut, wenn der Standard älteren Standard.

Dies ist der einzige Fehler, und der Versuch, mit -lstdC++ zu verknüpfen, hilft nicht. Hat jemand das schon einmal erlebt? Kann ich irgendwelche Vorschläge bekommen?

Edit: Ich erstelle ein ofstream Objekt wie folgt:

std::string filename = string("noddler\\") + callobj.get_ucid() + "_" + callobj.gram_counter() + ".grxml"; 
ofstream grxml_file(string("C:\\CWorld\\Server\\Grammar\\") + filename); 
... 
grxml_file.close(); 

Es ist in Ordnung zusammengestellt zu werden, aber nicht verknüpft zu werden.

+2

Bitte schreiben Sie den Code, der diesen Fehler verursacht. –

Antwort

3

Ich würde vermuten, dass Sie einen Code wie dieses:

string fname = "foo.txt"; 
ifstream ifs(fname); 

Versuchen Sie es zu ändern:

ifstream ifs(fname.c_str()); 

Dies könnte passieren, wenn die Header-Dateien Sie verwenden etwas sind aus dem Gleichgewicht geraten mit die Bibliotheken, zu denen Sie verlinken. Wenn dies nicht funktioniert, geben Sie den Code ein, der das Problem verursacht.

+1

Auch wenn diese Änderung * funktioniert *, ist das keine befriedigende Lösung, so wie sie jetzt aussieht. Es bedeutet zu sagen, dass Sie die neue C++ 0X-Funktion nicht verwenden sollten, um in C++ 0X-Modus zu erstellen. Die eigentliche Lösung besteht wahrscheinlich darin, Befehlsschalter direkt auf 'g ++' zu setzen oder Dateien an der richtigen Stelle zu platzieren. –

+1

Ich denke, dass jeder, der echte Lösungen gegen den vorgeschlagenen C++ 0X-Standard baut, fehlgeleitet ist. Erstellen Sie auf jeden Fall exploratorischen Code gegen solche Dinge, aber bauen Sie echten Code gegen bestehende Standards und Implementierungen, die diese Standards solid unterstützen. –

+0

Welche neue C++ 0x Funktion ist das? – GManNickG