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

时间:2017-03-25 11:36:55

标签: c++ parameters constructor composite lvalue

我在c ++中使用复合模式和继承玩了一下。 它不应该是特殊的东西,所以我编写了一个组件有一个父组合作为复合,复合应该从组件中取出并使用它的基类(组件)中的构造函数。但后来我得到了以下错误:

  

"无法转换类型'复合*'的左值参数类型'复合*'"

研究了一下,发现了左值/右值等但是没有找到关于"参数的信息"类型。参数类型是右值?  是否可以将左值转换为参数类型?

这是我的代码作为较小的版本:

class Component {
private:
  Composite* parent;
public:
  Component(Composite* parent) {
    this->parent = parent;
  }
};
class Composite : public Component {
public:
  Composite(Composite* parent) : Component(parent) /* <-- Error */ { }
};

1 个答案:

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