0

如有错误请见谅,第一次在这里提问。所以我有这个功能,我有一个带有游戏玩家姓名和分数的矢量类型,同时我试图制作一个排名墙。在程序的这个特定部分中,我需要将字符串转换为 int。字符串部分实际上是字符串向量中的一个数字,我需要它是 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----------------------------";

}

所以,视觉工作室告诉我问题就在这里:

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:\users\user\google drive\mackenzie\projeto programacao\projeto\projeto\jogo.cpp 的指针 247

谁能帮我这个?

4

2 回答 2

5

用来()调用函数,c_str是函数不是变量:

ranking[i].c_str()
                ^^

另外,有了C++,你可以使用std::stoi停止使用c_str,如果条目无效转换为整数,它也会抛出异常:

int aux = stoi(ranking[i]);

 

并且,替换max_size()size()获取向量的实际大小,而不是最大可能大小。

于 2013-11-09T21:00:51.873 回答
1

c_str()是一个函数,所以你必须调用它:

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

就像我在评论中所说的那样,我也看到你正在使用max_size(). 这可能会在您的程序中引起很多问题,因为此方法返回向量可以容纳的最大大小,而不是当前驻留在其中的元素的数量。当您访问索引处大于容器大小的元素并取消引用它时,您将获得访问越界地址的未定义行为。

正确的使用方法是size()

for (int i = 0; i < ranking.size(); ++i)
//                  ^^^^^^^^^^^^^^
于 2013-11-09T21:00:47.780 回答