С двумя структурами A
и B
, которые подклассируют одну и ту же структуру Base
, я хочу иметь конструкторы копирования для A
и B
в структуре A
.
Проблема заключается в том, что предварительное объявление B
struct B;
до определения структуры A
является проблемой, поскольку компилятор еще не знает, что B будет создавать подклассы Base.
Возможно ли сделать такое предварительное объявление, например:-
struct B : public Base;
// Что не работает, к сожалению
Конструктор копирования в структуре 'A' имеет ошибку
A(const B& b) : Base{b} {} // Error no matching Base::Base() for const B&.
Вопрос в том, как это сделатьправильное предварительное объявление для структуры B
.
struct Base {
Base(int value) : _value{value} {}
Base(const Base& base) : _value{base.value()} {}
int value() const {return _value;}
private:
const int _value;
};
struct B; // Compiler does not know that B will subclass Base
struct A : public Base {
A(int value) : Base{value} {}
A(const A& a) : Base{a} {}
A(const B& b) : Base{b} {} // Error no matching Base::Base() for const B&.
};
struct B : public Base {
B(int value) : Base{value} {}
B(const B& b) : Base{b} {}
B(const A& a) : Base{a} {}
};
int main() {
A a1{20};
A a2{a1};
cout << "a1: " << a1.value() << " a2: " << a2.value() << endl;
B b1{10};
B b2{b1};
cout << "b1: " << b1.value() << " b2: " << b2.value() << endl;
}