2011-07-29 40 views
4

我正在研究游戏引擎并致力于实现状态设计。我有一个引擎类负责所有的初始化操作,并包含调用更新,渲染和处理活动状态输入函数的游戏循环。需要作为一元'&'操作数的C++左值

我所有不同的状态都继承自需要引用Engine类的State,以便初始化引擎的保护引用以供将来使用。下面是相关的代码:

// file: state.h 
class Engine; 

class State { 
public: 

    State(Engine &engine) : mEngine(engine) { } 
protected: 
    Engine &mEngine; 
}; 

// file: gamestate.h 
class GameState : public State { 
public: 
    GameState(Engine &engine) : State(engine) {} 
}; 

终于在初始化engine.cpp我创建了一个新的游戏状态的对象,这是其中报告的错误。

GameState *state = new GameState(&this); 

我编码在C++在Linux上使用Qt创建者在一分钟,没有进入到Windows机器现在就看它是否与海湾合作委员会还是不成问题的。

+0

为什么不具有外部全局指针而不是成员指针? –

+0

@ Shaktal不,不可能选择一个引擎。注射是一件好事。和全局变量肯定是一件坏事。事实上,“国家”甚至不应该是引擎的一员。而且C++是一种现代语言,不要再用指针来搞乱你不需要的!为什么不简单'引擎引擎; GameState状态(引擎)'? – log0

回答

8

变化:

GameState *state = new GameState(&this); 

到:

GameState *state = new GameState(*this); 

这是因为您是按引用传递引擎的国家类的构造函数。

+0

你为什么取消引用不是引用的东西... –

+0

我的意思是指针,不想混淆 –

+2

@Jesus,但是'this'是一个指针而不是引用 - 他需要对它进行取消引用以便将其作为一个参考。 – Rup

相关问题