无效使用大括号括起初始化列表

时间:2017-10-26 11:49:04

标签: c++ c++11 initializer-list

我想初始化Foo类

WHERE

但我收到了错误

  

错误:无效使用大括号括起来的初始化列表

WHERE

如果我使用变量执行此操作,则没有错误

class Foo {
public:
    struct MyStruct {
        uint8 i;
        char c;
    };

    Foo(MyStruct args...){

    };
};

但我对此不满意,我想让代码变得紧凑

1 个答案:

答案 0 :(得分:1)

您需要明确说明要传递给构造函数的类型。以下编译:

auto test = Foo(
  Foo::MyStruct{1, 'a'},
  Foo::MyStruct{2, 'b'}
);

注意aschepler的评论虽然Foo(MyStruct args...)不是C ++风格的可变参数函数。因此,如果您真的要尝试使用构造函数参数执行某些操作,则可能会遇到麻烦。换句话说:你会遇到麻烦:)。