Как отправить сообщение классу, создавшему объект

Я хотел бы отправить данные обратно в класс, который создает этот объект.

Это связано с игрой.
Вражеские объекты имеют резьбовую функцию и самостоятельно перемещаются по сцене.

Он генерирует много ошибок, если вы включаете заголовочный файл из класса, который создает объекты, в сам объект … для передачи указателей.

Класс врага:

Class Enemy
{
private:
void (*iChange)(DWORD &);
}:
Enemy::Enemy(void (*iChangeHandler)(DWORD &) ) : iChange(0)
{
this->iChange = iChangeHandler;
}
void Enemy::Draw(D3DGraphics& gfx)
{
this->iChange(this->dwThreadID); // send a message back to the class that created me

gfx.PutPixel(this->my_position_x + 0,this->my_position_y,this->red,this->blue,this->green);
this->grafix->DrawCircle(this->my_position_x + 0,this->my_position_y, this->radius, this->red,this->blue,this->green);

(sprintf)( this->enemy_buffer, "X: %d, Y: %d", this->my_position_x , this->my_position_y);
this->grafix->DrawString( this->enemy_buffer, this->my_position_x , this->my_position_y, &fixedSys, D3DCOLOR_XRGB(255, 0, 0) );
}

Класс игры:

struct enemies_array_ARRAY {
std::string name;
DWORD ID;
Enemy* enemy;
} enemies_array[25];

void Game::EnemyEvent(DWORD &thread_id)
{
enemies_array[0]...... // i want to acces this struct array
}

Game::Game(HWND hWnd)
{
enemies_array[0].name = "john Doe";
enemies_array[0].ID = NULL;
enemies_array[0].enemy =  new Enemy(&Game::EnemyEvent);
// error: C2664:

// another attemp
enemies_array[0].name = "john Doe";
enemies_array[0].ID = NULL;
enemies_array[0].enemy =  new Enemy(Game::EnemyEvent);
// error C3867:
}

0

Решение

Если я правильно понимаю, вы хотите вызвать функцию на Game объект. Это означает, что вам нужно пройти указатель на Game объект для того, чтобы правильно позвонить нестатический указатель на функцию-член(iChange) на это.

Внесите изменения, показанные ниже, и вы сможете делать то, что хотите

enemies_array[0].enemy =  new Enemy(this,&Game::EnemyEvent);

typedef void (Game::*ChangeFunc)(DWORD &)
Class Enemy
{
private:
ChangeFunc iChange;
Game *pGame;
}:

Enemy(Game *pCreatorGame, ChangeFunc iChangeHandler )
{
iChange = iChangeHandler;
pGame = pCreatorGame;
}

void Enemy::Draw(D3DGraphics& gfx)
{
(pGame->*iChange)(this->dwThreadID);
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector