2017-02-10 3 views
-2

Я пытаюсь преобразовать строку два символа в целое, но я получаюC++: Не удалось преобразовать строку в целое

error: invalid cast from type 'std::basic_string<char>' to type 'int' 

, когда я запускаю его. Вот код.

#include <iostream> 
#include <cstdlib> 
#include <string> 

using namespace std; 

class Instruction 
{ 
private: 
    vector<string> Inst; 

public: 
    void readFile(string infile) 
    { 
     ifstream myfile (infile); 
     if (myfile.is_open()) 
     { 
      while (getline(myfile, line)) 
      { 
       Inst.push_back(line); 
      } 
      myfile.close(); 
     } 
     else 
      cout << "Unable to open file." << endl; 
    } 

void runProcess() 
    { 
     for (int i=0; i<Inst.size(); i++) 
     { 
      op_code = getOperation(Inst[i]); 

Я пропущу остальную часть runProcess, так как это неважно. Ниже, у меня есть

int getOperation(string inst) 
    { 
     return (int)inst.substr(2); 
    } 

, в котором я столкнулся с проблемой. Я пробовал (int), stoi и atoi. Ничего не сработало.

Я довольно новичок в C++, так что это очень хорошо может быть проблемой при попытке передать строку из вектора, но я не уверен. Если мне нужно опубликовать что-нибудь еще, дайте мне знать. Любая помощь будет принята с благодарностью.

+1

Что не работает, используя 'stoi()'? –

+0

Некоторые версии g ++ не поддерживают 'std :: stoi'. См. Http://stackoverflow.com/questions/14743904/stdstoi-missing-in-g-4-7-2. Однако вы можете использовать 'std :: atoi'. 'return std :: atoi (inst.substr (2) .c_str());' –

+0

@ πάνταῥεῖ std :: stoi() дал ошибку 'stoi не является членом std', а просто std() дал 'stoi is не объявлено в этой области ' – cec526

ответ

0

Если std::stoi не доступен, рекомендуется использовать strtol.

Проверить это Q & Подробности: basics of strtol

Коротко:

const char *s = input.c_str(); 
char *t; 
long l = strtol(s, &t, 10); 
if(s == t) { 
    /* strtol failed */ 
} 
0

Дайте это попробовать

#include <iostream> 
#include <vector> 
#include <sstream> 

int main(int argc, const char * argv[]) { 

    std::vector<std::string> Inst; 
    std::string line = "59"; 
    Inst.push_back(line); 

    std::stringstream ss; 
    int op_code; 
    ss << Inst[0]; 
    ss >> op_code; 
    std::cout << "op_code = " << op_code << std::endl; 
    return 0; 
} 

Это хорошо работает для меня.

Однако, если вы говорите, что ваша строка содержит 2 символа, почему бы вам написать
inst.substr(2);?
Это означает, что вы получаете данные в своей строке от индекса 2 до конца. Вы уверены, что это то, что вы хотели сделать?
Если вы хотите, чтобы вы взяли первые 2 символа, тогда вы должны написать
inst.substr(0,2);.

Смежные вопросы