【问题标题】:c++11 initializer_list doesn't work for literal constant value of embedded object?c++11 initializer_list 不适用于嵌入对象的文字常量值?
【发布时间】:2019-02-06 00:54:15
【问题描述】:

我有一个简单的c++11程序:

struct A{
    int i;
    struct B{
        int i;
        int j;
    };
} a = {2, {3, 4}};

g++-7 编译报错:

error: too many initializers for 'A'
 }a={2,{3,4}};
            ^

我只是想知道如何使用文字常量声明 A 的对象,如何修复它?

非常感谢。

【问题讨论】:

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


    【解决方案1】:

    由于您的 A 类型仅包含一个数据成员(int 类型),您的初始化程序中最多可以有一个元素:

    struct A{
        int i;
        struct B{
            int i;
            int j;
        };
    } a = {2};   // OK, a.i == 2
    

    A 还包含一个类型成员 (A::B) 对 A 类型的对象的创建无关紧要。)

    【讨论】:

    • 很好的答案。所以如果 OP 声明了 struct B { ... } b; 并命名了一个成员,他们的代码就可以工作,所以他们很可能只是忘记声明一个类型为 B 的成员
    • 是的,那个小小的} b; 也会带来很大的不同。
    • 这就是为什么我们通常不赞成类型定义inside 变量/成员声明!除了混淆所有人之外,它没有任何目的而过于可爱。这种风格充其量适合于 pub quizzes,但不适用于人与人之间交流的代码。
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多