c ++基本构造函数左值到参数

c++ base constructor lvalue to parameter

我玩了一下 C++ 中的复合模式和继承。 它不应该是什么特别的东西所以我编码一个组件有一个父作为复合,复合应该从组件派生并使用它的基础class(组件)的构造函数。但后来我收到以下错误:

"Cannot convert lvalue of type 'Composite*' to parameter type 'Composite*'"

稍微研究了一下,发现 lvalues/rvalues 等是什么,但没有找到任何关于 "parameter" 类型的信息。参数类型是右值吗? 是否可以将左值转换为参数类型?

这是我的代码的缩小版本:

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 */ { }
};