Environnement: Visual Studio 2008 Professional Edition
J'essaie de déboguer la conversion hexadécimale en décimale, mais malheureusement, obtenir "le terme ne correspond pas à une fonction prenant 3 arguments" cette erreur. comment résoudre ce problème?
code:
#include <string> using namespace std; int main() { int stoi; int number = 0; string hex_string = "12345"; number = stoi(hex_string, 0, 16); cout << "hex_string: " << hex_string << endl; cout << "number: " << number << endl; return 0; }
3 Réponses :
C'est pourquoi vous ne devriez pas utiliser en utilisant namespace std;
. Débarrassez-vous et corrigez le programme en mettant std ::
avant tout dans l'espace de noms std
.
#include <iostream> #include <string> int main() { int stoi; int number = 0; std::string hex_string = "12345"; number = std::stoi(hex_string, 0, 16); std::cout << "hex_string: " << hex_string << std::endl; std::cout << "number: " << number << std::endl; return 0; }
Vous pouvez aussi simplement renommer votre entier stoi
pour ne pas entrer en conflit avec std :: stoi
, mais il est fortement recommandé de ne pas avoir using namespace std;
dans votre code.
Si vous ne pouvez pas utiliser stoi
du tout car Visual Studio 2008 ne prend pas en charge C ++ 11 et vous ne pouvez pas passer à une version plus récente, consultez ici pour des alternatives. Mais sur le long terme, ce serait probablement une meilleure idée d'installer un nouvel IDE si possible.
Maintenant l'erreur comme 1] erreur C2039: 'stoi': n'est pas membre de 'std' 2] erreur C2064: le terme ne s'évalue pas en une fonction prenant 3 arguments
Quelle est votre version? Vous avez besoin d'au moins C ++ 11 pour utiliser stoi
.
Vous devez utiliser C ++ 11 ou version ultérieure
@Blaze J'ai Microsoft Visual C ++ 10.0.40219
@Adderbill dans ce cas, vous ne pouvez pas utiliser std :: stoi
et devrez utiliser une alternative. Consultez ici pour quelques suggestions, en particulier < a href = "https://stackoverflow.com/a/6154614/10411602"> cette réponse.
Puisque stoi
est une fonction de la bibliothèque de chaînes
, vous ne redéfinissez pas stoi comme int stoi
. Supprimez int stoi
, ce serait réussi.
Code complet comme celui-ci
#include <string> #include <iostream> using namespace std; int main() { int number = 0; string hex_string = "12345"; number = stoi(hex_string, nullptr, 16); cout << "hex_string: " << hex_string << endl; cout << "number: " << number << endl; return 0; }
1] erreur C2039: 'stoi': n'est pas membre de 'std' et 2] erreur C3861: 'stoi': identifiant introuvable, ce sont les erreurs si j'ai supprimé int stoi
@Adderbill pouvez-vous modifier votre publication avec notre suggestion, après cela, nous pourrons vous aider
Merci à tous pour votre réponse! code final qui est débogué avec succès sur Visual Studio 2008 pour la conversion de l'hexadécimal en décimal
#include <iostream> using namespace std ; #include <sstream> int wmain() { int binNumber ; unsigned int decimal; string hexString = "0x3d"; //you may or may not add 0x before stringstream myStream; myStream <<hex <<hexString; myStream >>binNumber; cout <<binNumber <<decimal; return 0; }
stoi
est un entier, pourquoi essayez-vous de l'appeler comme une fonction?@VTT s'il n'est pas déclaré, il donne une erreur comme "" erreur C3861: 'stoi': identifiant introuvable "
Vous souhaitez utiliser std :: stoi en.cppreference.com/w/cpp / string / basic_string / stol (une autre raison pour laquelle l'utilisation de l'espace de noms std est erronée)
@Adderbill non, ce n'est pas le cas - wandbox.org/permlink/p0BmWNaYTAaFm8HR
La prise en charge de C ++ 11 (où
stoi
a été introduit) est au mieux limitée. Vous avez besoin d'une solution différente ou d'un compilateur différent. (Notez que s'il s'agit d'un exercice scolaire, vous êtes censé faire la conversion vous-même, pas utiliser une bibliothèque.)