none
erreur de saisi d'une string! RRS feed

  • Question

  • salut une erreur se déclanche lors de la saisir d'un variable de type string

    voila l'erreur: Erreur 1 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) c:\users\soufiane\documents\visual studio 2008\projects\class 2\class 2\class 2.cpp 17 class 2

    #include "stdafx.h"
    #include<iostream>
    #include<conio.h>
    #include"Homme.h"
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    string n;
    int a;
    cout<<"saisir un nom : ";
    cin>>n;
    cout<<"saisir l'age : ";
    cin>>a;
    Homme h1(n,a);
    cout<<"le nom : "<<h1.getage();
    cout<<"l'age : "<<h1.getage();
    
    
    	_getch();
    }
    
    mardi 29 juin 2010 00:05

Réponses

  • Bonjour,

    cin>> ne fonctionne pas avec std::string.

    Pour contourner le problème, vous pouvez essayer de remplacer :
    cin>>n;

    par :
    char n2[1024];
    cin >> n2;
    n = n2;

    (J’ai déclaré n2 avec une taille de 1024 à titre d’exemple. Il faut mettre une taille supérieure à la taille maximale des noms que l’utilisateur du programme peut rentrer).

    Cordialement,
    Chris

    • Marqué comme réponse benzema10 mardi 29 juin 2010 14:40
    mardi 29 juin 2010 08:26

Toutes les réponses

  • Bonjour,

    cin>> ne fonctionne pas avec std::string.

    Pour contourner le problème, vous pouvez essayer de remplacer :
    cin>>n;

    par :
    char n2[1024];
    cin >> n2;
    n = n2;

    (J’ai déclaré n2 avec une taille de 1024 à titre d’exemple. Il faut mettre une taille supérieure à la taille maximale des noms que l’utilisateur du programme peut rentrer).

    Cordialement,
    Chris

    • Marqué comme réponse benzema10 mardi 29 juin 2010 14:40
    mardi 29 juin 2010 08:26
  • Bonjour,

    cin>> ne fonctionne pas avec std::string.

    Pour contourner le problème, vous pouvez essayer de remplacer :
    cin>>n;

    par :
    char n2[1024];
    cin >> n2;
    n = n2;

    (J’ai déclaré n2 avec une taille de 1024 à titre d’exemple. Il faut mettre une taille supérieure à la taille maximale des noms que l’utilisateur du programme peut rentrer).

    Cordialement,
    Chris

    Bonjour,

    Il est faux de dire que std::cin ne fonctionne pas avec std::string. Les flux (std::cin, std::cout, mais aussi les fichiers std::[io]fstream, et les flux de chaines std::[io]stringstream) possèdent les surcharges nécessaires pour les opérateurs << et >>. Pour les chaines de caractères std::string, ces surcharges sont déclarées dans le fichier d'en-tête <string> . Ainsi, le code suivant fonctionne parfaitement :

    #include <iostream>
    #include <string>
    
    int main()
    {
      std::string nom;
      std::cout<<"Saisir nom : \n";
      std::cin>>nom;
      int age;
      std::cout<<"Saisir age : \n";
      std::cin>>age;
      std::cout<<nom<<" est age de "<<age<<" ans\n";
      return 0;
    }
    
    Utiliser un tableau de caractère de taille fixe (char n2[1024];cin >> n2;) est une source récurrente d'innombrable bugs et un problème de sécurité . Cela relève quasiment de la faute professionnelle que de continuer à utiliser des tableaux de char à la place des std::string pour les chaines de caractères en C++.

    mercredi 14 juillet 2010 07:17