【发布时间】:2018-10-17 06:55:17
【问题描述】:
我正在使用装饰器设计模式。装饰器继承自 Game 类,以游戏为参数。
class Game {
protected:
int a;
public:
~Game();
Game(int a);
};
class Decorator : public Game{
Game *m_game;
public:
Decorator(Game *game):m_game(game){}
};
然后它返回错误:错误:“装饰器”的构造函数必须显式初始化没有默认构造函数的基类“游戏” 装饰器(游戏 *game):m_game(game){} ^
我该如何解决?
【问题讨论】:
-
致电
Game(int a)。 -
等一下,你的
Decorator是一个游戏并且有一个游戏吗? -
你的“设计”看起来很可疑。你要么继承,要么包含。
-
正如错误消息所说。
Decorator的构造函数必须显式初始化其基类,即调用Game的构造函数。如果您没有在Decorators 初始化列表中显式调用这样的构造函数,编译器默认会寻找不接受任何参数的Game构造函数。您的示例没有提供要调用的此类构造函数。 -
在装饰器模式中,您不应该从具体的类类型继承,而只能从公开相关虚拟方法的基接口继承。装饰器将实现它们以执行您要添加的附加处理并将请求转发到在构造时传入的封闭具体实例。