В настоящее время я работаю над тем, чтобы загрузить кучу разных NPC из файла и загрузить его в игру. У меня все работает правильно с массивами, но я хотел бы изменить его на использование вектора, так как я могу изменить размер, если мне нужно больше NPC, чем пространство, доступное в массиве, и поэтому у меня нет просто пустого массива, если В настоящее время мне не нужно много NPC. Обратите внимание, что следующий код из программы тестирования, а не мое фактическое программирование. Я сделал это, поэтому случайно не запутался в полном проекте.Вызов функции класса из вектора вместо массива
int main()
{
char input;
bool Running = true;
NPC Creatures[MAX_NPCS];
//InitCreatures loads the X, Y and Type from the file. I know with vectors I have to
//resize it as I go along, Which would be included in the function.
if(Creatures[MAX_NPCS].InitCreatures(Creatures) == false)
{
Creatures[MAX_NPCS].CleanUp(Creatures);
return 0;
}
while(Running == true)
{
cout << "(C)heck an NPC, (A)ttack and NPC or (E)xit the program\n";
cin >> input;
switch(input)
{
case 'C': Creatures[MAX_NPCS].Check(Creatures); break;
case 'c': Creatures[MAX_NPCS].Check(Creatures); break;
//The Check function just shows the X, Y and Type of the NPC
case 'A': Creatures[MAX_NPCS].Attack(Creatures); break;
case 'a': Creatures[MAX_NPCS].Attack(Creatures); break;
//Attack shows X, Y and type and then removes that NPC from the array.
case 'E': Running = false; break;
case 'e': Running = false; break;
default: cout << "That was not a valid input\n"; break;
}
}
Creatures[MAX_NPCS].CleanUp(Creatures);
cout << "Exiting\n";
system("PAUSE");
return 0;
}
Действительно единственная проблема, которую я имею становится Main для запуска функции NPC класса из вектора вместо того, чтобы использовать массив, как у меня сейчас. Я могу легко изменить другие функции в функциях, которые я вызываю, чтобы принять вектор и обработать его правильно.
При попытке использовать вектор для выполнения функций, я был только в состоянии назвать их, когда у меня было что-то вроде этого:
Creatures[1].Attack(Creatures);
Конечно, когда я называю их, как, что значения не возвращаются правильно и я обычно получаю сообщение об ошибке. Кроме того, я не знаю, сколько NPC будет загружено для текущей карты, если Any.
Любая помощь с этим была бы оценена. Я понимаю, что я новичок, когда дело доходит до программирования, особенно когда речь заходит о Vectors. Если мне нужен код функции, я с радостью опубликую его.
Erm, доступ как 'Creatures [MAX_NPCS]' является неопределенным поведением. У вас есть только индексы до 'MAX_NPCS-1'. – Xeo
Ой, хорошо, поймай. Кроме того, почему я хочу векторов. Но я чувствую, что не понимаю их правильно. В любом случае функции имеют защиту, которая мешает вам добавлять слишком много NPC и делает это правильно: P – Mattycaeks
'std :: vector' - не более, чем хороший пакетный динамический массив. Просто в .push_back' вещи в него и получить их с нормальным доступом к массиву ('operator []'). Что говорит об этом ваша книга по программированию? – Xeo