C ++调用成员函数没有循环包含

时间:2014-10-16 20:30:03

标签: c++ directx

我正在使用DirectX9并构建一个Basic OOP系统来处理绘制/更新循环。

所以我有3个课程DirectXGameD3DWindowDemoGame : public DirectXGame,因此您可以看到DemoGame扩展了DirectXGame课程。并且演示游戏中有一个D3DWindow的实例作为窗口。

所以D3DWindow创建一个Windows窗口,然后在窗口内启动DirectX或对其进行全面筛选。

所以我创建了void(*drawEvent)(int dt)& void(*updateEvent)(int dt)和一些setter(addDraw, addUpdate)应允许DirectXGame将方法传递到D3DWindow对象

void DirectXGame::createWindow(D3DWindow* wind, HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShowD)
{
    this->d3dWindow = wind;
    this->d3dWindow->create(hInstance, hPrevInstance, lpCmdLine, nCmdShowD);
    /*below is lines 26 and 27 from errors*/
    this->d3dWindow->addDraw(this->draw);
    this->d3dWindow->addUpdate(this->update);
}

然而我得到的只是错误

C3867: 'DirectXGame::draw': function call missing argument list; use '&DirectXGame::draw' to create a pointer to member directxgame.cpp 26
C3867: 'DirectXGame::update': function call missing argument list; use '&DirectXGame::update' to create a pointer to member directxgame.cpp 27

我无法通过& DirectXGame :: update或DemoGame :: update,因为这些无法访问成员变量,所以我怎样才能让它工作。

现在我一直在阅读并找到像转发器这样的东西,但为了做到这一点,我必须在DirectXGame内转换为D3DWindow,这会导致需要一个标头,然后包含循环问题。

如果您需要查看更多代码,请提出要求。

1 个答案:

答案 0 :(得分:1)

您可以使用具有2种纯抽象方法的界面' draw'并且'更新'。 D3DWindow拥有一个指向此接口实例的指针(您的DirectXGame实例)并调用' draw'并且'更新'在它上面。

class IDirectXGame
{
public:
  virtual ~IDirectXGame() {}
  virtual draw(int) = 0;
  virtual update(int) = 0;
};

继承接口

class DirectXGame : public IDirectXGame
{
  ...
};

D3DWindow拥有一个指向实现该接口的实例的指针。

class D3DWindow
{
  ...

  IDirectXGame *gameInstance;
};

在' createWindow'只是通过这个'到了windows' gameInstance'构件。