Pourquoi je ne peux pas cout
string
aimer ça:
string text ;
text = WordList[i].substr(0,20) ;
cout << "String is : " << text << endl ;
Lorsque je fais cela, j'obtiens l'erreur suivante:
Erreur 2 erreur C2679: binaire '<<': aucun opérateur trouvé qui prend un opérande de droite de type 'std :: string' (ou il n'y a pas de conversion acceptable) c: \ users \ mollasadra \ documents \ visual studio 2008 \ projets \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **
C'est incroyable, que même cela ne fonctionne pas:
string text ;
text = "hello" ;
cout << "String is : " << text << endl ;
#include <iostream>
?Réponses:
Vous devez inclure
la source
using namespace std
ouusing std::cout
;using std::endl
;string text;
l'édition (erreur ajoutée) dit, que ce n'est pas le problème mais l'en-string
tête manquant .std::basic_string
classe (car ils incluent indirectement l'en-tête <xstring> défini par l'implémentation ( ne l'incluent jamais directement )). Bien que cela vous permette d'utiliser la classe de chaîne, la valeur pertinenteoperator<<
est définie dans l'en-tête <string> lui-même, vous devez donc l'inclure manuellement. S'appuyant également sur d'autres en-têtes pour inclure indirectement la définition desstd::basic_string
travaux dans VC ++, mais cela ne fonctionnera pas sur tous les compilateurs.Vous devez en
std
quelque sorte référencer l'espace de noms du cout . Par exemple, insérezen plus de la définition de votre fonction ou du fichier.
la source
Il y a plusieurs problèmes avec votre code:
WordList
n'est défini nulle part. Vous devez le définir avant de l'utiliser.#include <string>
avant de pouvoir utiliser la classe de chaîne et iostream avant d'utilisercout
ouendl
.string
,cout
etendl
vivent dans l'std
espace de noms, vous ne pouvez donc pas y accéder sans les préfixer àstd::
moins que vous n'utilisiez lausing
directive pour les mettre d'abord dans la portée.la source
Les réponses ci-dessus sont bonnes, mais si vous ne souhaitez pas ajouter de chaîne include, vous pouvez utiliser ce qui suit
la source
Utilisez c_str () pour convertir la chaîne std :: string en const char *.
la source
Vous n'avez pas à faire référence
std::cout
oustd::endl
explicitement.Ils sont tous deux inclus dans le
namespace std
.using namespace std
au lieu d'utiliser l'opérateur de résolution de portée à::
chaque fois, c'est plus facile et plus propre.la source
Si vous utilisez le système Linux, vous devez ajouter
using namespace std;
Sous les en-têtes
Si Windows, assurez-vous de mettre correctement les en-têtes
#include<iostream.h>
#include<string.h>
Reportez-vous cela fonctionne parfaitement.
la source
using namespace std;
n'a rien à voir avec le système d'exploitation ciblelinux
. De même, l'ajout.h
de l'include n'a rien à voir avec le système d'exploitation cible qui est Windows,#include <iostream>
et#include <string>
fonctionnera sur Windows.