Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从另一个类复制带有参数的构造函数_C++_Arduino - Fatal编程技术网

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

C++ 从另一个类复制带有参数的构造函数,c++,arduino,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

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

错误:对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。有人能解释一下这里出了什么问题吗

Liskov替换原则维基页面上说:

可替换性是面向对象编程的一个原则 在计算机程序中,如果S是T的子类型,那么 类型T可替换为类型S的对象(即类型 T可以用子类型(S)的任何对象替换,而不改变 程序的任何期望属性(正确性、任务 表演等)

您可以使用B的对象而不是A,但不能使用相反的对象。

您的B::B(const B&)需要对const B的引用,但您提供的是A的实例。B从A派生并不重要;即使每个B都是a,反之亦然。事实上,object1是a,但不是B


为了进一步澄清:如果您希望B可以从A构造,您需要提供一个采用A的构造函数,例如:
B::B(const A©A):A(copyA){}

不要在源文件中重新定义类。编辑#包括,在这里粘贴错误的副本:)并尝试创建A。您熟悉“is-A”的含义吗关系它是对称的吗?应该为
A(副本)
调用哪个构造函数?另外,正如错误所说,您没有将
a
作为参数的构造函数注意
B::B(const a©A)
不是
B
的复制构造函数,但它确实使用了
a
的复制构造函数。它将使B可以从A构造,但它本身不是一个“复制构造函数”。我必须将“B::B(constB©A):A(copyA)”更改为“B::B(constA©A):A(copyA)”