2013-11-09 24 views
0

對不起,第一次在這裏提問。 所以我有這個功能,我有一個向量類型的名稱和分數的遊戲玩家,而即時嘗試做排名牆。 在我需要將字符串轉換爲int的程序的特定部分。字符串的一部分實際上是在串矢量一個數字,我需要它是int,所以我可以用其他的數字進行比較,所以這裏是:將字符串轉換爲C++中的int問題

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

} 

因此,Visual Studio是告訴我問題正是在這裏:

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

如說:

錯誤4錯誤C3867:「的std :: basic_string的< _Elem,_Traits,_Alloc> :: c_str':函數調用缺少參數列表;使用 '&的std :: basic_string的< _Elem,_Traits,_Alloc> :: c_str' 來創建一個指針構件C:\用戶\用戶\谷歌驅動\麥肯齊\ projeto programacao \ projeto \ projeto \ jogo.cpp 247

任何人都可以幫助我嗎?

+0

你爲什麼使用'max_size()'?只需使用'size()'。 – 0x499602D2

+0

'int aux = atoi(ranking [i] .c_str);' - 我想你打算**調用**那個成員函數?像'c_str()'? – 2013-11-09 21:00:27

回答

1

c_str()是一個函數,所以你必須把它叫做:

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

就像我說的commments,我也看到你使用max_size()。這可能會在程序中導致很多問題,因爲此方法返回矢量可容納的最大大小,而不是當前駐留的元素數量。當您訪問大於容器大小的索引處的元素並對其進行解引用時,將獲得用於訪問超出界限地址的「未定義行爲」。

正確的方法使用的是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]); 

 

而且,替代由size()max_size()得到載體的實際大小,而不是最大可能的大小。