我在c ++中使用了复合模式和继承。 它不应该是一些特殊的东西,所以我编写了一个组件作为组合的父级,组合应该从组件诠释,并使用它的基类(组件)的构造函数。 但后来我得到以下错误:
“不能将'Composite *'类型的左值转换为参数类型'Composite *'”
研究了一下,发现了什么左值/右值等,但没有找到任何有关“参数”类型的内容。 参数类型是右值吗? 有没有可能将左值转换为参数类型?
这是我的代码作为一个更小的版本:
class Component { private: Composite* parent; public: Component(Composite* parent) { this->parent = parent; } }; class Composite : public Component { public: Composite(Composite* parent) : Component(parent) /* <-- Error */ { } };I played a bit around with composite-patterns and inheritance in c++. It shouldn't be something special so i coded that a component has a parent as composite, the composite should derrived from component and use the constructor from it's base class (Component). But then i got following error:
"Cannot convert lvalue of type 'Composite*' to parameter type 'Composite*'"
Researched a bit and found out what lvalues/rvalues etc. are but didn't find anything about a "parameter" type. Is a parameter type a rvalue? Is it possible to convert a lvalue to a parameter type?
Here is my code as a smaller version:
class Component { private: Composite* parent; public: Component(Composite* parent) { this->parent = parent; } }; class Composite : public Component { public: Composite(Composite* parent) : Component(parent) /* <-- Error */ { } };最满意答案
更正的代码中的注释。
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 */ { } };Comments in corrected code.
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 */ { } };更多推荐
发布评论