cissine
Messages postés16Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention21 mai 2010
-
28 nov. 2009 à 11:27
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
1 déc. 2009 à 00:21
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.
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 28 nov. 2009 à 13:14
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 ?
cissine
Messages postés16Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention21 mai 2010 28 nov. 2009 à 15:46
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
#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);
}
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 28 nov. 2009 à 15:51
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+.
c:\documents and settings\cissine\mes documents\visual studio 2008\projects\projetbanque\projetbanque\string.cpp(39) : error C2679: '>>' 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)
e:\program files\microsoft visual studio 9.0\vc\include\istream(1144): peut être 'std::basic_istream<_Elem,_Traits> &std::operator >><std::char_traits<char>>(std::basic_istream<_Elem,_Traits> &,signed char *)'
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 29 nov. 2009 à 19:47
Je t'ai corrigé quelques petites erreurs qui trainaient.
En plus de cela, j'ai un peu "proprisé" ton code. Pourquoi appelé ta classe "String" avec un S majuscule ? Tu as tout à fait le droit de l'appeler "string" si tu le met dans un namespace à toi. C'est d'ailleurs la raison pour laquelle on a créée ce méchanisme. Par exemple au lieu de std::string, tu peux avoir my::string.
J'ai viré les using namespace std;, qui en plus d'être moche, sont dangereux quand mis dans un header (en effet, quelqu'un qui inclue ton fichier se fait sauter tout ses espaces de noms, alors qu'il n'a rien demandé: bonjour les conflits !).
Enfin, j'ai modifié quelques petits trucs (par exemple, en cas d'affectation ou de comparaison, je test si l'objet lui même n'essaie pas de s'affecter ou de se comparer lui même).
J'ai aussi corrigé quelques warning (notamment la comparaison entre nombres signés et non signés, et la tentative de passage de "" dans un char* au lieu d'un const char*).
cissine
Messages postés16Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention21 mai 2010 30 nov. 2009 à 11:19
bonjour,
Maintenant vu que j'ai pas que la classe String dans mon projet, j'ai aussi quelques classes 'Banque, Client, Opération ...' lorsque j'exécute mon projet, j'ai zéro erreur, mais un message s'affiche qui dis :
"Windows a déclenché un point d'arrêt dans ProjetBanque.exe"
aussi j'ai ça : impossible d'ouvrir le fichier en-tête pré-compilé Debug/ProjetBanque.pch
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 30 nov. 2009 à 11:41
impossible d'ouvrir le fichier en-tête pré-compilé Debug/ProjetBanque.pch
Je ne suis pas sous Windows, donc j'ai un peu du mal à voir ce qui ne vas pas, la-dessus.
Windows a déclenché un point d'arrêt dans ProjetBanque.exe
Soit tu as effectivement posé un breakpoint, auxquels cas il faut voir avec ton IDE si tu peux les retirer, soit tu as une erreur d'exécution, qu'il te faut alors corriger.
Passe ton projet dans un debugger, et regarde ce qui se passe.
cissine
Messages postés16Date d'inscriptiondimanche 26 avril 2009StatutMembreDernière intervention21 mai 2010 30 nov. 2009 à 23:35
Alors quand j'ai passé mon projet dans un debugger en mode pas à pas et j'ai découvert ca :
quand je fais Banque maBanque="banque de test" , il y a un souci au niveau de ma classe String ici:
String::String (const char* newStrRep)
{
int taille = strlen(newStrRep);
--> strRep = new char[taille];
strcpy(strRep, newStrRep);
}
qui me met comme erreur, il n'y a pas de code source disponible pour l'emplacement en cours..
ensuite le point d'arrêt est à ce niveau là :