2013-11-09 2 views
0

Извините за ошибки, первый вопрос здесь. , поэтому у меня есть эта функция, где у меня есть векторный тип с именами и десятками игроков в игре, в то время как я пытаюсь сделать ранжирование стены. в этой конкретной части программы мне нужно преобразовать строку в int. строка часть на самом деле число в строке вектора и мне нужно, чтобы это было ИНТ, так что я могу сравнить его с другими числами, так вот она:Преобразование строки в int проблемы в C++

void exibir_ranking(vector<string> &ranking) //dentro do laco, procura qual o maior score, imprime ele na tela juntamente com o nome correspondente no outro vetor depois apaga o valor e o nome dos vectors 
{ 
    int k; 
    vector <string> nomes; 
    vector <int> pontuacoes; 

    for(int i=0;i<ranking.max_size();i++) { 
     if(i==0 || i%2 ==0) nomes.push_back(ranking[i]); 
     else if(i==1 || i%2!=0) { 
      int aux = atoi(ranking[i].c_str); 
      pontuacoes.push_back(aux);   
     } 
    } 


    cout << "\n\n\t\tRANKING:\n\n"; 
    while(pontuacoes.size()!=0){ 
     int maior =0; 
     for (k=0; k< pontuacoes.max_size(); k++){ 
      if(pontuacoes[k] > maior) maior = pontuacoes[k]; 
     } 
     cout << k << "- " << "Nome: " << nomes[k] << "\tScore: "<<pontuacoes[k] << endl; 
     nomes.erase (nomes.begin()+k); 
     pontuacoes.erase (pontuacoes.begin()+k); 
    } 
    cout<<"\n----------------------------"; 

} 

так, визуальная студия говорит мне о проблема именно здесь:

else if(i==1 || i%2!=0) { 
    int aux = atoi(ranking[i].c_str); 
    pontuacoes.push_back(aux);   
} 

как говорит:

ошибка 4 ошибка C3867: «станд :: basic_string < _Elem, _Traits, _Alloc> :: c_str ': список вызовов отсутствующих аргументов; использовать '& станд :: basic_string < _Elem, _Traits, _Alloc> :: c_str', чтобы создать указатель на член C: \ Users \ Пользователь \ Google диск \ Mackenzie \ Projeto programacao \ Projeto \ Projeto \ jogo.cpp 247

Может ли кто-нибудь мне помочь?

+0

Почему вы используете 'max_size()'? Просто используйте 'size()'. – 0x499602D2

+0

'int aux = atoi (rank [i] .c_str);' - Я полагаю, вы хотели ** называть ** эту функцию-член? как 'c_str()'? –

ответ

1

c_str() является функцией, так что вы должны назвать его:

aux = atoi(ranking[i].c_str()); 
//       ^^ 

И как я сказал в commments, я также вижу, что вы используете max_size(). Вероятно, это вызывает множество проблем в вашей программе, так как этот метод возвращает максимальный размер, который может удерживать вектор, а не количество текущих элементов, находящихся в нем. Когда вы обращаетесь к элементу с индексом, большим, чем размер контейнера, и разыщите его, вы получите Undefined Behavior для доступа к адресу вне пределов.

Правильный метод использования является size():

for (int i = 0; i < ranking.size(); ++i) 
//     ^^^^^^^^^^^^^^ 
5

Использование () для вызова функции, c_str функция не является переменной:

ranking[i].c_str() 
       ^^ 

Кроме того, имея C++, вы можете использовать std::stoi, чтобы остановить использование c_str, он также выдает исключение, если запись недействительна для преобразования в целое число:

int aux = stoi(ranking[i]); 

 

И заменить max_size() на size(), чтобы получить реальный размер вектора, а не максимально возможный размер.

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