【发布时间】:2020-09-25 11:47:24
【问题描述】:
我有一堆从某个接口继承的简单结构,我不能为它们使用列表初始化:
#include <iostream>
#include <string>
class Foo
{
public:
virtual void write() = 0;
};
struct Bar : public Foo // if I remove this inheritance, it will compile
{
int num;
void write()
{
std::cout << "num = " << num;
}
};
int main()
{
Bar b{ 11 }; // error here
b.write();
return 0;
}
编辑:编译器输出带有多个警告和错误:
<source>:21:15: error: no matching function for call to 'Bar::Bar(<brace-enclosed initializer list>)'
21 | Bar b{ 11 };
| ^
<source>:10:8: note: candidate: 'Bar::Bar()'
10 | struct Bar : public Foo // if I remove this inheritance, it will compile
| ^~~
<source>:10:8: note: candidate expects 0 arguments, 1 provided
<source>:10:8: note: candidate: 'constexpr Bar::Bar(const Bar&)'
<source>:10:8: note: no known conversion for argument 1 from 'int' to 'const Bar&'
<source>:10:8: note: candidate: 'constexpr Bar::Bar(Bar&&)'
<source>:10:8: note: no known conversion for argument 1 from 'int' to 'Bar&&'
【问题讨论】:
-
请在问题中包含错误信息
-
@Quimby 这不是 POD,因为虚拟方法。
-
@Barmar 我知道,但是错误来自继承,它与虚拟方法无关。
标签: c++ class inheritance constructor list-initialization