1
votes

erreur C2064: le terme ne s'évalue pas en une fonction prenant 3 arguments

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;
}


5 commentaires

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.)


3 Réponses :


2
votes

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.


5 commentaires

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.



1
votes

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;
}


2 commentaires

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



0
votes

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;
}


0 commentaires