我最终试图创建一个视频游戏,并且在C ++中遇到了这个问题,其中错误的数组正在被更改。这是出错的代码:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string commonNames[] = {""};
string xCommonNames[] = {""};
int commonIndex = 0;
int xCommonIndex = 0;
void placeName(string name, string placement)
{
if(placement == "common"){
commonNames[commonIndex] = name;
commonIndex++;
}
else if(placement == "xCommon"){
xCommonNames[xCommonIndex] = name;
xCommonIndex++;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
placeName("Nathan","common");
placeName("Alex","xCommon");
placeName("Alyssa","common");
cout << commonNames[0] << endl;
cout << commonNames[1] << endl;
cout << xCommonNames[0] << endl;
system("pause");
return 0;
}
我将此作为输出:
Nathan
Alyssa
Alyssa
有些东西不对,应该结果:
Nathan
Alyssa
Alex
在游戏中,有不同类型,如legendary和xLegendary,它们有同样的问题。我甚至检查过他们是否有相同的地址而他们没有。我做错了什么?
答案 0 :(得分:5)
这是一个1号数组:
string commonNames[] = {""};
然后,您可以像访问多个元素一样访问它。超出界限是未定义的行为。您可能希望查看std::vector<std::string>
。例如
std::vector<std::string> commonNames;
std::vector<std::string> xCommonNames;
void placeName(const std::string& name, const std::string& placement)
{
if(placement == "common"){
commonNames.push_back(name)
}
else if(placement == "xCommon"){
xCommonNames.push_back(name);
}
}