我在c ++中使用复合模式和继承玩了一下。 它不应该是特殊的东西,所以我编写了一个组件有一个父组合作为复合,复合应该从组件中取出并使用它的基类(组件)中的构造函数。但后来我得到了以下错误:
"无法转换类型'复合*'的左值参数类型'复合*'"
研究了一下,发现了左值/右值等但是没有找到关于"参数的信息"类型。参数类型是右值? 是否可以将左值转换为参数类型?
这是我的代码作为较小的版本:
class Component {
private:
Composite* parent;
public:
Component(Composite* parent) {
this->parent = parent;
}
};
class Composite : public Component {
public:
Composite(Composite* parent) : Component(parent) /* <-- Error */ { }
};
答案 0 :(得分:0)
更正后的代码中的评论。
class Composite; // <- _declare_ the idea of a Composite class here
class Component {
private:
Composite* parent;
public:
Component(Composite* parent) {
this->parent = parent;
}
};
class Composite // <- _define_ it here
: public Component {
public:
Composite(Composite* parent) : Component(parent) /* <-- no error */ { }
};