对不起任何错误,第一次在这里提问。 所以我有这个功能,我有一个矢量类型与游戏的玩家的名字和分数,而我试图建立排名墙。 在程序的这个特定部分,我需要将字符串转换为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----------------------------";
}
所以,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&lt; _Elem,_Traits,_Alloc&gt; :: c_str':函数调用缺少参数列表;使用'&amp; std :: basic_string&lt; _Elem,_Traits,_ Alloc&gt; :: c_str'创建指向成员的指针c:\ users \ user \ google drive \ mackenzie \ projeto programacao \ projeto \ projeto \ jogo.cpp 247
任何人都可以帮我这个吗?
答案 0 :(得分:5)
使用()
来调用函数,c_str
是函数而不是变量:
ranking[i].c_str()
^^
此外,使用C ++,您可以使用std::stoi
来停止使用c_str
,如果该条目无效转换为整数,它也会抛出异常:
int aux = stoi(ranking[i]);
并将max_size()
替换为size()
以获取向量的实际大小,而不是最大可能大小。
答案 1 :(得分:1)
c_str()
是一个函数,所以你必须调用它:
aux = atoi(ranking[i].c_str());
// ^^
就像我在文章中所说,我也看到你正在使用max_size()
。这可能会导致程序中出现很多问题,因为此方法返回向量可以容纳的最大大小,而不是当前驻留在其中的元素数量。当您访问索引大于容器大小的元素并取消引用它时,您将获得用于访问越界地址的未定义行为。
使用的正确方法是size()
:
for (int i = 0; i < ranking.size(); ++i)
// ^^^^^^^^^^^^^^