【发布时间】:2018-09-03 00:07:51
【问题描述】:
我正在尝试创建一个抽象类,用作派生类的“模板”。 我创建了一个向量(堆栈),在其中存储指向所述抽象类的指针,因为您不能从抽象类本身调用成员函数(谢天谢地;))
但是当我编译我的类时,我得到以下错误:
error: invalid use of incomplete type 'class GameState'
this->_states.top()->Cleanup();
^~
我已经尝试了很多东西,但我认为问题在于,我在 Game 类中有一个 GameState 类的前向声明,因为它们都必须相互了解。会不会是这个问题?
为了查看,这里是我的代码的sn-ps:
GameState.hpp:
#include "Game.hpp"
class GameState {
public:
Game *game;
virtual void Init()=0;
virtual void Cleanup()=0;
... (etc.)
protected:
GameState(){}
};
Game.hpp:
#include <stack>
#include <SFML/Graphics.hpp>
#include "TextureManager.hpp"
// I GUESS THAT THIS DECLARATION IS THE PROBLEM!
class GameState;
class Game {
public:
TextureManager *TextureMgr;
sf::RenderWindow Win;
Game();
~Game();
... (etc.)
bool IsRunning() { return this->running; }
bool Quit() { this->running = false; }
private:
std::stack<GameState*> _states;
bool running;
};
Game.cpp:(成员函数调用示例)
void Game::Cleanup() {
while (!this->_states.empty()) {
this->_states.top()->Cleanup();
this->_states.pop();
}
}
提前非常感谢您。如果前向声明是问题所在;您可能知道任何文章或书籍,其中使用不同的解决方案描述了这样的问题,两个类必须相互了解? 我已经在一堆书中搜索过,但我真的找不到一本,这引起了我的注意。
【问题讨论】:
标签: c++ pointers stack std forward-declaration