C++ 从另一个类复制带有参数的构造函数
我尝试从另一个类复制构造函数。这两个类在同一个文件中。我当前遇到的错误是: 错误:对B::B(A&)的调用没有匹配的函数 主文件中的代码段: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
#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 ©) : 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)”