如何为共享基类并在定义结构后定义的结构定义复制构造函数

时间:2019-06-11 13:31:02

标签: c++ c++17

有两个结构AB,它们继承了相同的Base结构,我想在结构{中有AB的复制构造函数{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

2 个答案:

答案 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