Я работаю над DirectX9 и создаю базовую систему ООП для обработки цикла рисования/обновления.Функция вызова вызова C++ без кругового включения
Так у меня есть 3 класса DirectXGame
, D3DWindow
, DemoGame : public DirectXGame
так, как вы можете видеть DemoGame
распространяется на DirectXGame
класс. и демо-версия имеет экземпляр D3DWindow
внутри него как окно.
Поэтому D3DWindow создает окно Windows и сортирует запуск DirectX внутри окна или полный просмотр.
поэтому я создал void(*drawEvent)(int dt)
& void(*updateEvent)(int dt)
и некоторые сеттеров (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
, и это вызывает необходимость заголовка и последующей проблемы цикла включения.
Если вам нужно больше не читать код, пожалуйста, попросите его.
Знаете ли вы, что я даже не имел интерфейсов, я благодарю вас за это, однако это то, что я получаю от этого сейчас. 'Ошибка LNK2001: неразрешенный внешний символ" public: virtual void __thiscall IDirectXGame :: draw (int) " (? draw @ IDirectXGame @@ UAEXH @ Z) DirectXGame.obj' –
Возможно, вы забыли «= 0» в конце интерфейса? '= 0' делает этот метод чистым виртуальным, это означает, что дочерние классы переопределяют его. – nonplus
Dohhh .. был длинный день, пытаясь заставить эту работу –