【发布时间】:2011-08-11 09:36:06
【问题描述】:
我在运行时遇到向量迭代器不兼容错误。它发生在代码部分的最后,在 for 循环内 (humans.push_back( Human(&deck, (*iter)) );) 当我第一次收到错误时,我错误地使用了与“iter”不同的迭代器,所以运行时错误完全有道理。但是现在我更改了它并重新编译了所有内容(我仔细检查了它),我仍然得到这个错误。
void BlackjackGame::getHumansAndHouse()
{
// asks how many players, pushes_back vector accordingly, initializes house, checking for valid input throughout
string input;
vector<string> names;
while(true)
{
cout << "How many humans? (1 - 7)" << endl;
cin >> input;
if(!isdigit(input[0]))
cout << "Invalid input. ";
else
{
input.erase(1);
int j = atoi(input.c_str());
for(int i = 1; i <= j; i++)
{
while(true)
{
cout << "Enter player " << i << " name: ";
cin >> input;
if(strcmp(input.c_str(), "House") == 0)
cout << "Player name has to be different than 'House'." << endl;
else
{
names.push_back(input);
break;
}
}
}
break;
}
}
vector<string>::iterator iter;
for(iter = names.begin(); iter != names.end(); iter++)
humans.push_back( Human(&deck, (*iter)) );
house = House(&deck);
}
人类是一个向量:
vector<Human> humans;
其中 Human 是一个类,其构造函数如下:
Human(Deck *d, string n) : Player(d), name(n) { printNameCardsAndTotal(); }
(Human是Player的派生类)
由于 iter 是字符串向量的迭代器,我不明白为什么我在 for 循环内的那一行中得到向量迭代器不兼容。这不像是我试图直接对人类使用 iter。
错误在这里:
humans.push_back( Human(&deck, (*iter)) );
【问题讨论】:
-
能否请您发布定义
names和humans向量的代码,以及实际的错误输出? -
names' 迭代器位于我的代码之上,为了清晰起见,我将其移至底部。实际的向量名称位于代码部分的顶部。我也发布了人类。
-
deck声明在哪里? -
好的,我现在看到了向量和迭代器的定义,很抱歉。编译器或运行时输出(错误消息,直接从终端复制并粘贴到代码框格式)怎么样?
-
请提供一个独立的示例。 “自包含”表示源代码用于编译和执行,除了标准库之外没有任何依赖。
标签: c++ vector runtime-error