I have a set of classes like this:
class Member {
public:
Member(int val) : val_(val) {}
private:
int val_;
};
class A {
public:
A(const Member& member) : member_(member) {}
private:
Member member_;
};
class B : public A {
using A::A;
private:
Member other_member_{10}; // <--- commenting this line fixes errors
};
class C : public B {
public:
C(const Member& member) : B(member) {}
};
And when I'm trying to construct an object of class C:
int main(int argc, char** argv) {
Member member(12);
C c(member);
return 0;
}
I get the following errors:
~/work/src/test/main.cpp: In constructor ‘C::C(const Member&)’:
~/work/src/test/main.cpp:26:37: error: use of deleted function ‘B::B(const Member&)’
C(const Member& member) : B(member) {}
^
~/work/src/test/main.cpp:19:12: note: ‘B::B(const Member&)’ is implicitly deleted because the default definition would be ill-formed:
using A::A;
^
~/work/src/test/main.cpp:19:12: error: no matching function for call to ‘Member::Member()’
some notes with candidates
I know that using A::A
should provide visibility for all base constructors, but as stated in the error message, that it is implicitly deleted...
So, why after add member with brace-initializer to class B I get these errors?
Thanks in advance.