有两个结构A
和B
,它们继承了相同的Base
结构,我想在结构{中有A
和B
的复制构造函数{1}}。
在定义结构A
之前,B
struct B;
的前向声明是一个问题,因为编译器尚不知道B将继承Base。
是否可以像这样进行前向声明--
A
//不能令人满意的工作
结构'A'中的复制构造函数有错误
struct B : public Base;
问题是如何对结构 A(const B& b) : Base{b} {} // Error no matching Base::Base() for const B&.
进行正确的前向声明。
B
答案 0 :(得分:3)
将A
的构造函数定义移出类定义,因此您可以在使用B
之前对其进行定义。
struct B;
struct A : Base {
// ...
A(const B& b);
};
struct B : Base {
// ...
};
// ...
A::A(const B& b) : Base{b} {}
请注意,采用不同类型参数的构造函数不是复制构造函数。
答案 1 :(得分:0)
您可以在struct B
之前定义struct A
。