В настоящее время я работаю над проектом, который посвящен вектору объектов класса People. Программа компилируется и работает очень хорошо, но когда я использую отладчик, он умирает, когда пытается что-либо сделать с объектом PersonWrangler. В настоящее время у меня есть 3 разных класса: один для человека, человек, который занимается всеми людьми коллективно, и класс игры, который обрабатывает ввод и вывод игры.Vector Troubles in C++
Редактировать: Мой основной вопрос - понять, почему он умирает, когда он вызывает outputPeople. Также я хотел бы понять, почему моя программа работает точно так, как она должна, если я не использую отладчик. Функция outputPeople работает так, как я предполагал.
Edit 2: CallStack имеет 3 плохие вызовы, которые являются:
- станд :: вектор> :: начать (это = 0xbaadf00d)
- станд :: вектор> :: размер (этот = 0xbaadf00d)
- PersonWrangler :: outputPeople (это = 0xbaadf00d)
Соответствующий код:
class Game
{
public:
Game();
void gameLoop();
void menu();
void setStatus(bool inputStatus);
bool getStatus();
PersonWrangler* hal;
private:
bool status;
};
, который вызывает outputPeople, где он быстро умирает от ошибки baadf00d.
void Game::menu()
{
hal->outputPeople();
}
где Hal является объектом PersonWrangler типа
class PersonWrangler
{
public:
PersonWrangler(int inputStartingNum);
void outputPeople();
vector<Person*> peopleVector;
vector<Person*>::iterator personIterator;
int totalPeople;
};
и функции outputPeople определяется как
void PersonWrangler::outputPeople()
{
int totalConnections = 0;
cout << " Total People:" << peopleVector.size() << endl;
for (unsigned int i = 0;i < peopleVector.size();i++)
{
sort(peopleVector[i]->connectionsVector.begin(),peopleVector[i]->connectionsVector.end());
peopleVector[i]->connectionsVector.erase(unique (peopleVector[i]->connectionsVector.begin(),peopleVector[i]->connectionsVector.end()),peopleVector[i]->connectionsVector.end());
peopleVector[i]->outputPerson();
totalConnections+=peopleVector[i]->connectionsVector.size();
}
cout << "Total connections:" << totalConnections/2 << endl;
}
Где гал инициализируется
Game::Game()
{
PersonWrangler* hal = new PersonWrangler(inputStartingNum);
}
Что вы думаете? – 2010-04-20 21:19:27
Где находится вектор соединений? –
Есть ли причина, по которой вы используете столько указателей? Использование Raw-указателя не рекомендуется на C++. –