我希望有人能给我为什么以下内容无法编译的技术细节,如果可能的话,一个解决方法。
我有一个名为 Foo 的现有结构,以及使用初始化列表创建 Foo 实例的代码。此代码编译并工作:
struct Foo {
int id1;
int id2;
};
int main()
{
Foo f({1,2});
return f.id1;
}
我希望 Foo 实现一个接口:
struct Interface {
// All pure virtual methods, but this won't compile even if empty
};
struct Foo : public Interface{
int id1;
int id2;
};
int main()
{
Foo f({1,2});
return f.id1;
}
此代码不再编译,出现以下错误
cannot convert argument 1 from 'initializer list' to 'const _Ty &'
(错误会根据您的确切编译器而变化。)
我找到了与聚合初始化相关的标准的这一部分:
[dcl.init.aggr]/1 聚合是一个数组或一个类(第 12 条),其中 1.1 没有用户提供的、显式的或继承的构造函数(15.1),1.2 没有私有或受保护的非静态数据成员(第 14 条)、1.3 没有虚函数 (13.3) 和 1.4 没有虚拟、私有或受保护的基类 (13.1)。
虽然我实际上不确定聚合初始化是否是这里发生的事情。有人可以解释正在发生的错误,如果可能的话,提供我可以对界面进行的更改吗?我有几个需要这个接口的现有结构,以及许多使用这种初始化形式的现有代码,我想尽可能少地重写它。谢谢!