2017-03-25 125 views
0

我在C++中使用了复合模式和继承。 它不应该是特别的东西,所以我编码组件有父母作为复合材料,复合材料应该从组件诠释和使用它的基类(组件)的构造函数。但后来我得到了以下错误:C++的基础构造函数左值参数

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

研究之了一下,发现了什么左值/右值等都是,但没有找到有关“参数”式的东西。参数类型是右值吗? 是否可以将左值转换为参数类型?

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

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

修复了前向声明并添加了缺少的分号之后,所显示的代码按原样编译得很好。显示的代码没有问题。显然,这个幻想代码不是提供真正代码的[mcve],而是这个幻想代码。失败。 –

+0

修复了分号并尝试了代码......但仍然出现错误 – TreCore

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

thx!所以我总是在基类之前声明耙类,如果我在基类中使用耙类...但实际上是什么意思是“参数类型”? – TreCore

+0

复合材料在首次“使用”之前必须已经“声明”。即当你提到一个类型时,编译器必须已经被告知它存在 - 即使你还没有描述它的外观。 –

+0

好吧有道理thx ...我也查了一下什么是“参数类型”,但我不明白它与“左值”有什么关系......参数类型只是特定参数的变量类型或我错了吗?所以我明白一个参数可以是一个左值或右值(如果你使用“const”作为例子) – TreCore

相关问题