Я получаю ошибку несовместимых векторов итераторов во время выполнения. строка, в которой это происходит, находится в самом конце раздела кода внутри цикла 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(); }
(Человек - производный класс игрока)
, поскольку iter является итератором для вектора строк, я не понимаю, почему я получаю векторные итераторы несовместимыми в этой строке внутри цикла for. Я не пытаюсь использовать его непосредственно с людьми.
ошибка здесь:
humans.push_back( Human(&deck, (*iter)) );