2009-07-22 8 views
3

J'ai une application construite avec le paramètre -std = gnu ++ 0x dans tdm-mingw g ++ 4.4.0 sous Windows.Erreur de liaison fstream en g ++ avec -std = gnu ++ 0x

Il utilise un objet ofstream et quand je construis, il donne l'erreur suivante reliant:

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)' 

Il construit correctement lorsque vous utilisez la norme par défaut plus.

C'est la seule erreur, et essayer de lier avec -lstdC++ n'aide pas. Est-ce que quelqu'un a déjà vécu cela? Puis-je avoir des suggestions?

Edit: Je crée un objet ofstream comme ceci:

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

Il se compilé bien, mais pas se lié.

+2

Veuillez publier le code qui provoque cette erreur. –

Répondre

3

Je suppose que vous avez un code comme ceci:

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

Essayez de changer à:

ifstream ifs(fname.c_str()); 

Cela pourrait se produire si les fichiers d'en-tête que vous utilisez sont un peu détraqué avec les bibliothèques auxquelles vous liez. Et si cela ne fonctionne pas, publiez le code qui provoque le problème.

+1

Même si ce changement * fonctionne *, ce n'est pas une solution très satisfaisante, telle qu'elle est actuellement. Cela revient à dire que pour construire en mode C++ 0X, vous ne devriez pas utiliser la nouvelle fonctionnalité C++ 0X. La solution actuelle implique probablement d'obtenir des commutateurs de commande directement sur 'g ++' ou de placer les fichiers au bon endroit. –

+1

Je pense que quiconque construit de vraies solutions contre la norme C++ 0X proposée est mal orienté. Bien sûr, construisez un code exploratoire contre de telles choses, mais construisez un vrai code par rapport aux standards existants et aux compléments qui soutiennent solidement ces standards. –

+0

Quelle nouvelle fonctionnalité C++ 0x est-ce? – GManNickG

Questions connexes