Мне нужен двойной указатель типа DizzyCreature (мой класс), чтобы указывать на массив указателей DizzyCreature. Когда я запускаю его, я получаю «Место чтения нарушения доступа 0x ...». Я могу создать DizzyCreature * и просто вызывать его функции-члены, но когда не могу запустить массив и сделать то же самое для каждого объекта.
Я следую этим инструкциям:
http://www.cplusplus.com/forum/beginner/10377/
код
server.h:
class Server
{
public:
Server(int x, int y, int count);
~Server(void);
void tick();
private:
DizzyCreature** dcArrPtr;
DizzyCreature* dcPtr;
int _count;
};
server.cpp:
Server::Server(int x, int y, int count)
{
dcPtr = new DizzyCreature[count]; // this works just fine
dcArrPtr = new DizzyCreature*[count]; // this doesn't (but gets past this line)
_count = count;
}
Server::~Server(void)
{
delete[] *dcArrPtr;
delete[] dcPtr;
}
void Server::tick()
{
dcPtr->takeTurn(); // just fine
for (int i = 0; i < _count; i++) {
dcArrPtr[i]->takeTurn(); // crash and burn
}
}
EDIT:
Функция-член takeTurn () находится в родительском классе DizzyCreature. Программа превращает его в функцию, но как только она пытается изменить закрытую переменную-член, возникает исключение. Если это имеет значение, DizzyCreature относится к типу GameCreature и WhirlyB, поскольку это назначение для MI.