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;
}
stoiest 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ù
stoia é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.)