stringstream erreurs de c++
Je suis en train d'essayer de comprendre comment stringstream
travaux afin d'être en mesure d'identifier et de convertir des nombres possibles qui ont été saisis comme des chaînes de caractères... pour quelque raison que ce petit morceau de code que j'ai écrit pour essayer de comprendre stringstream
est ennuyeux, avec quelques erreurs...
#include <iostream>
#include <string>
using namespace std;
int str2int (const string &str) {
std::stringstream ss(str);
int num;
if((ss >> num).fail())
{
num = 0;
return num;
}
return num;
}
int main(){
int test;
int t = 0;
std::string input;
while (t !=1){
std::cout << "input: ";
std::cin >> input;
test = str2int(input);
if(test == 0){
std::cout << "Not a number...";
}else
std::cout << test << "\n";
std::cin >> t;
}
return 0;
}
Erreurs:
Error C2079:'ss' uses undefined class std::basic_stringstream<_elem,_traits,_alloc>'
Error C2228: left of '.fail' must have class/struct/union
Error C2440: 'initializing': cannot convert 'const std::string' into 'int'
ce que je fais mal?
Pas la raison derrière les messages d'erreur, mais une chose que vous faites mal, c'est à l'aide de
stringstream
, quand vous devriez être en utilisant istringstream
. (L'utilisation de fail
est également pas très idiomatique.)OriginalL'auteur Gal Appelbaum | 2012-03-22
Vous devez vous connecter pour publier un commentaire.
Vous devez inclure les éléments suivants fichier d'en-tête -
Chaque fois que vous voyez des erreurs comme
undefined class
, vous devriez toujours regarder manquantes pour les fichiers d'en-tête en premier.Ici est la documentation de la
stringstream
classe.OriginalL'auteur
À utiliser stringstream, ce que vous devez faire;
Après cela, tout semble fonctionner comme il le devrait.
OriginalL'auteur
Vous devez inclure succession.
#include <sstream>
OriginalL'auteur
J'ai besoin d'ajouter - si votre projet utilise des les en-têtes précompilés (par exemple,
"stdafx.h"
pour l'application console Win32 ou"pch.h"
pour le Windows Store app) - merci de vérifier qu'ils sont inclus à l'avance de<sstream>
.OriginalL'auteur
Inclure ce:
Aussi, écrire ceci:
Par la manière, vous pouvez utiliser
std::cin >> test
dans lemain()
lui-même comme:Pas besoin de
str2int
fonction!return ss >> num ? num : 0;
? (Bien que je serais probablement séparer les>>
dans une déclaration séparée.ss >> num; return ss ? num : 0;
.)C'est gentil. 🙂
OriginalL'auteur