复制带有另一个类的参数的构造函数

时间:2018-06-19 11:32:31

标签: c++ arduino

我尝试从另一个类复制一个构造函数。这两个类在同一文件中。我目前收到的错误是:

  

错误:没有匹配的函数可以调用B :: B(A&)

主文件的片段:

#include "file.h"
// create the objects
A object1(1000000, 5);
B object2(object1);

file.cpp的片段:

class A {
public:
    A::A(uint32_t one, uint32_t two) { }
};
class B : public A {
public:
    B::B(const B &copy) : A(copy) { }
 }

};

头文件中的片段。

class B : public A {
public:
    B(const B&);

我试图使代码对于stackoverflow尽可能简单。有人可以解释一下这里出了什么问题吗?

2 个答案:

答案 0 :(得分:5)

您的B :: B(const B&)期望引用const B,但是您提供的是A的实例。即使每个B都是-a A,反之亦然。实际上,object1是-a A,但不是-a B。

更多说明:如果希望B可从A构造,则需要提供一个采用A的构造函数,例如:B::B(const A& copyA): A(copyA) {}

答案 1 :(得分:2)

李斯科夫替代原则维基页面上说:

  

可替代性是面向对象编程中的一项原则,其中指出   在计算机程序中,如果S是T的子类型,则对象   类型T可以替换为类型S的对象(即类型为对象的对象)   T可以用子类型S)的任何对象代替,而无需更改   程序的任何理想属性(正确性,任务   等等)。

您可以使用B的对象代替A的对象,但不能反向使用。