L'écriture de la chaîne de ostream
Lorsque j'essaie de compiler le code ci-dessous (dans un Qt 4.8 utilisant llvm-g++-4.2 (GCC) 4.2.1), j'obtiens l'erreur suivante:
../GLWidget.cpp:24: instantiated from here
../GLWidget.cpp:24: error: explicit instantiation of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' but no definition available
Que fait cette erreur signifie, et que dois-je faire pour le réparer?
Code Source:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void testOStream(){
filebuf fb;
fb.open ("test.txt",ios::out);
std::ostream os(&fb);
std::string test("test");
os << test; //This line has the problem
fb.close();
}
Compile bien sur ideone
Ce qui devrait avoir compilé, mais essayez d'ajouter
Compile bien sur MSVC10
Il semble que ce soit assez communs de problème si vous êtes sur Mac OS X Mountain Lion, essayez d'ajouter
Il est intéressant de noter, avant C++11,
Ce qui devrait avoir compilé, mais essayez d'ajouter
#include <ostream>
.Compile bien sur MSVC10
Il semble que ce soit assez communs de problème si vous êtes sur Mac OS X Mountain Lion, essayez d'ajouter
-mmacosx-version-min=10.7
comme un drapeau de compilation si vous êtesIl est intéressant de noter, avant C++11,
iostream
n'était pas tenu de #include <ostream>
.OriginalL'auteur Mortennobel | 2012-12-21
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez une version C++ avant C++11, vous voudrez peut-être ajouter
#include <ostream>
à votre programme.Qu'avec C++11 et plus tard
<iostream>
est nécessaire pour#include <ostream>
.En-tête
<iostream>
synopsisC++2003:
C++2011:
OriginalL'auteur Sebastian Mach
Assurez-vous que vous
#include <ostream>
. Plus tôt que C++11,<ostream>
n'est pas garantie incluse par<iostream>
. La raison, la définition deos
était très bien, peut-être parce qu'elle est généralement définie par l'implémentation de la norme en-têtes de bibliothèque inclure d'autres les en-têtes de la bibliothèque standard (sauf si spécifié). Avec votre mise en œuvre,<iostream>
peut avoir inclus une définition destd::ostream
, mais pas les fonctions qui vont avec. Cependant, il devrait ont inclus tout, si vous êtes à la compilation C++11.<iostream>
est tenu d'inclure<ostream>
.Bon point. Édité.
Ouais, j'ai vérifié un standard et ne savais pas que c'était un changement.
OriginalL'auteur Joseph Mansfield
@ChadCambell souligné, le problème s'est avéré être que Qt 4.8 utilise -mmacosx-version-min=10.5, mais doit avoir été -mmacosx-version-min=10.7
J'ai trouve de plus en plus d'utiliser les infos du problème ici:
http://qt-project.org/forums/viewthread/19106/P15
La mise à jour de Qt 5.0 résout également le problème
OriginalL'auteur Mortennobel