struct B {
int b;
B(int i = 0) : b(i) {}; // constructor
};
struct D : B {
int d;
};
int main () {
D obj = {1}; // <-- error
// D obj {1}; // <-- error (different)
}
上面的代码没有编译,并给出:
error: could not convert ‘{1}’ from ‘<brace-enclosed initializer list>’ to ‘D’
同样如此,即使我删除了&#34;构造函数&#34;线。
如果我删除=
符号,即D obj {1};
,则会在下面给出:
error: no matching function for call to ‘D::D(<brace-enclosed initializer list>)’
解决此类问题的正确语法是什么?
答案 0 :(得分:7)
D
没有构造函数使用int
。如果你希望它继承B
的构造函数,请这样说:
struct D : B {
using B::B;
int d;
};
考虑到D
有另一名int
成员,您可能希望做的不止这些。
更完整的D
初始化B::b
(通过调用B::B
)和D::d
可能如下所示:
struct D : B {
D(int d_) : B(d_), d(d_) {}
int d;
};
无论哪种方式,您的代码都需要说D
有一个构造函数采用int
。
使用您的代码和我的代码段链接到工作示例:http://goo.gl/YbSSHn
答案 1 :(得分:1)
在您编写的内容中,D
只有一个默认构造函数,并且不知道如何调用B::B(int i)
。您所要做的就是在D
中提供相应的构造函数,如:
struct D : B {
D(int i) : B(i) {}//;
int d;
};