begin process at 2012 05 29 19:19:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

no match for 'operator>>' in 'std::cin >>


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

no match for 'operator>>' in 'std::cin >>

samedi 28 novembre 2009 à 11:27:31 | no match for 'operator>>' in 'std::cin >>

cissine

Bonjour,
Mon problème est le suivant :
lors ce que je compile mon programme C++ sous codeblocks ou visual c++ 2008 express j'ai cette erreur là:
In member function void Banque::interfaceCreerClient()
" no match for 'operator>>' in 'std::cin >> nomClient

voici le code :
void Banque::interfaceCreerClient() {
cout << endl;
cout << "Entrez le nom du nouveau client :" << endl;
String nomClient;
cin >> nomClient;

if(isClientExiste(nomClient)) {
cout << "Un client du meme nom existe deja." << endl;
interfaceCreerClient();
} else {
creerClient(nomClient);
cout << "Client cree." << endl;
interfaceAdministrateur();
}

J'ai aussi declarer un "using namespace std;" pour ne plus marquer std::cin ou std::cout
Merci d'avance pour votre aide.
samedi 28 novembre 2009 à 13:14:37 | Re : no match for 'operator>>' in 'std::cin >>

CptPingu

Administrateur CodeS-SourceS

J'ai aussi declarer un "using namespace std;" pour ne plus marquer std::cin ou std::cout


Beurk ! A éviter. Mieux vaut écrire std::, ça t'éviteras bien des problèmes plus tard. Si tu veux vraiment écrire cout au lieu de std::cout, préfère : "using std::cout;". Faire sauter tout les namespaces, ce n'est pas très judicieux...

Sinon, pour ton erreur, il te dit qu'il ne sait pas comment remplir la variable nomClient, car celle-ci n'est pas de type string, mais est de type String. Donc il va chercher la surcharge de l'opérateur >> dans la classe personnalisé String.
Est-ce une faute de frappe, ou as-tu vraiment créer une classe String ?
samedi 28 novembre 2009 à 15:46:48 | Re : no match for 'operator>>' in 'std::cin >>

cissine

bonjour,

Merci pour votre aide, et ce n'est pas une faute de frappe, mais j'ai vraiment créer une classe String.
Avant j'avais pleins d'erreurs qui disait la même chose pour operator << quand je faisais des cout, et avec le déclaration de unsing namespace std ca ma résolut le problème mais la...

la voila ma classe String:
#include <string.h>
#include <iostream>

#include "String.h"


String::String ( char* newStrRep)
{
int taille = strlen(newStrRep);
strRep = new char[taille];
strcpy(strRep, newStrRep);
}

String::String ( const String& newString )
{
int taille = strlen(newString.strRep);
strRep = new char[taille];
strcpy(strRep, newString.strRep);
}

String::~String ()
{
delete[] strRep;
//delete this;
}

String& String::operator = ( const String& newString)
{
delete[] strRep;
int taille = strlen(newString.strRep);
strRep = new char[taille];
strcpy(strRep, newString.strRep);
return *this;
}

void String::print () const
{
std::cout << strRep;
}

int String::operator == ( const String& newString)
{
if( strlen(strRep) != strlen(newString.strRep) )
{
return 0;
} else
{
for( int i = 0 ; i < strlen(strRep) ; i++)
{
if( strRep[i] != newString.strRep[i] )
{
return 0;
}
}
return 1;
}
}

String String::operator + (String & newString )
{
int newLength = strlen(strRep) + strlen(newString.strRep);
char* newStrRep = new char[newLength];
for(int index = 0 ; index < strlen(strRep) ; index++ )
{
newStrRep[index] = strRep[index];
}
for(int index = 0 ; index < strlen(newString.strRep) ; index++ )
{
newStrRep[strlen(strRep) + index] = newString.strRep[index];
}
return String(newStrRep);
}

char & String::operator [] ( int index)
{
return strRep[index];
}

String::operator char* () const
{
return strRep;
}

void String::setString ( char * newStrRep)
{
delete[] strRep;
int taille = strlen(newStrRep);
strRep = new char[taille];
strcpy(strRep, newStrRep);
}

Si vous pouvez m'aider s'il vous plait.
samedi 28 novembre 2009 à 15:51:24 | Re : no match for 'operator>>' in 'std::cin >>

CptPingu

Administrateur CodeS-SourceS
Ce n'est pas compliqué, tu dois redéfinir operator<< dans ta classe "String", sinon std::cout ne sait pas comment intéragir avec. Ce n'est pas parce que tu as nommé ta classe "String" que l'intéraction est automatique.
C'est exactement comme si tu faisais:

Toto t;
std::cout << t << std::endl;

Il y a incompréhension de la part du compilateur.

De même, pour intéragir avec std::cin, il te faut redéfinir operator>>, un peu comme tu l'as fait pour operator[] et operator+.
samedi 28 novembre 2009 à 16:00:20 | Re : no match for 'operator>>' in 'std::cin >>

cissine

Ah d'accord, alors pour cout je fais :(par exemple je sais si c'est exactement ça)

ostream &operator<<( ostream &out, String &chaine )
{
out << chaine.getChaine();
return out;
}

avec
char *String::getChaine()
{
return chaine;
}


Mais pour cin je ne vois pas trop comment faire.
samedi 28 novembre 2009 à 16:35:22 | Re : no match for 'operator>>' in 'std::cin >>

CptPingu

Administrateur CodeS-SourceS
Un petit exemple de redéfinition de flux pour std::cout et std::cin, qui devrait répondre à ta question:

Code C/C++ :
#include <iostream>

class T
{
  friend std::istream& operator>> (std::istream& i, T& t);
  friend std::ostream& operator<< (std::ostream& o, const T& t);

public:
  T () {}
private:
  std::string s_;
};

std::istream& operator>> (std::istream& i, T& t)
{
  i >> t.s_;
  return i;
}

std::ostream& operator<< (std::ostream& o, const T& t)
{
  o << t.s_;
  return o;
}

int main()
{
  T t;

  std::cout << "Entrez t: ";
  std::cin >> t;
  std::cout << t << std::endl;

  return 0;
}
samedi 28 novembre 2009 à 16:55:21 | Re : no match for 'operator>>' in 'std::cin >>

cissine

Merci, et au niveau du T.h il faut mettre quoi comme fonction public ?
samedi 28 novembre 2009 à 16:55:35 | Re : no match for 'operator>>' in 'std::cin >>

cissine

Merci, et au niveau du T.h il faut mettre quoi comme fonction public ?
Je parle des opérateur >> et << .
samedi 28 novembre 2009 à 17:06:52 | Re : no match for 'operator>>' in 'std::cin >>

cissine

C'est bon merci à vous. maintenant je compile j'ai plus d'erreur.
samedi 28 novembre 2009 à 17:23:54 | Re : no match for 'operator>>' in 'std::cin >>

cissine

Maintenant lors de la compilation du programme j'ai l'erreur suivante, sachant que j'ai fais ce que vous m'avez demandé de faire.

>> binaire : aucun opérateur trouvé qui accepte un opérande de partie droite de type 'std::string' ou il n'existe pas de conversion acceptable

1 2

Cette discussion est classée dans : in, cout, std, cin, nomclient


Répondre à ce message

Sujets en rapport avec ce message

message d erreur: ambiguous overload for 'operator>>' in 'std::cin >> a [ par I0o0I ] Hello, J suis désolée, c est une question d ultra-débutant mais c'est juste que j aimerais bien etre sure de comprendre les messages d erreur. J ai l retour à la ligne [ par DarkC0 ] #include #include #include #include #include #include void retourLigne(int x, int y); void cadre_T(); void Color(int couleurDuTexte,int couleur verification entrée cin [ par fhoest ] Bonjour, je voudrai faire une vérification sur une entrée std::cin mon problème est que si je met par exemple ll et ensuite je valide par la touche "r [dev c++ / SFML] compilation OK mais exécutables muets o_O [ par dubstructor ] Bonsoir à tous, ce post s'adresse à ceux qui sont familiers avec SFML. voilà après m'être bataillé un après midi, j'ai enfin réussi à compiler une p Segfault bizarre sur un "cout" [ par Thunder255 ] Bonjour à tous, Voilà je fais face à un problème assez bizarre : [code=cpp]int main() { Graph g = Graph(5, 0.5); //g étant de type list > //rep aide pour un programme en c++ novice [ par tooth ] bonjour j'ai besoin d'aide pour compiler et exécuter un programme qu'on nous a demandé à l'école, j'ai jamais étudié de c++ alors je galère bcp, voilà Simple example OpenMP qui plante [ par uriot ] Bonjour, J'essaye un example simple d'utilisation de openMP sous windows et ca plante juste aprés la ligne std::cout << "start thread.\n" Je ne comp Allocation statique ou dynamique [ par luhtor ] Bon alors, j'ai un exemple de programme. Mais je me pose la question de sa validité sachant que ce que vous allez voir. C'est correct dans certain lan Vider cin [ par Mycado ] Bonjour,J'ai un problème avec la fonction cin, quand je fais: char out;cin >> ou saisie 1 seule lettre, pas le reste [ par blinix123 ] Yop all, Voilou petit probleme en C++, je pose une question a l'utilisateur et il doit repondre par O ou N, or s'il tape OONAZ, et bien le programme v


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 9,376 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales