2017-09-01 69 views
-5

我有一个内部未命名结构的结构。我想初始化整个结构,它是类初始化列表中的成员结构。如何在C++类的初始化程序列表中初始化具有未命名结构的成员结构?

struct Foo { 
    int z; 
    struct { 
    double upper; 
    double lower; 
    } x, y; 
}; 

class Bar { 
    Bar(); 

    Foo foo; 
}; 

可以这样做吗?

此结构还可以初始化“旧时尚”的方式提供一个没有统一初始化语法的构造函数吗?

struct Foo { 
    Foo() : z(2), x(/*?*/), y(/*?*/) {} 
    Foo() : z(2), x.lower(2) {} // doesn't compile 
    int z; 
    struct { 
     double upper; 
     double lower; 
    } x, y; 
}; 
+3

。你有没有尝试过,你是如何失败的? – Rakete1111

+1

你的内部结构定义是一个**未命名的结构**一个匿名结构略有不同,请参阅这里的区别:https://stackoverflow.com/a/14248127/8051589。 –

+0

我很抱歉将未命名的结构与匿名混淆。我不知道新的C++ 11统一初始化语法。我改进了有关没有大括号的初始化的问题。 –

回答

4

如果我理解正确,你要初始化struct Foo,其中包含一个unnamed struct,在Bar初始化列表:

#include <iostream> 

struct Foo { 
    int z; 
    struct { 
    double upper; 
    double lower; 
    } x, y; 
}; 

class Bar { 
public: 
    Bar(); 

    Foo foo; 
}; 

Bar::Bar() 
: foo { 1, { 2.2, 3.3}, {4.4, 5.5} } 
{ 

} 

int main() 
{ 
    Bar b; 

    std::cout << b.foo.z << std::endl; 
    std::cout << b.foo.x.upper << std::endl; 
    std::cout << b.foo.y.lower << std::endl; 
} 
0

如果我理解正确的话,你希望有一个静态初始化完整的结构包括内部的未命名的结构。

你有没有尝试过的东西如:当然

Foo foo { 1,   // z 
     {1.1, 2.2},  // x 
     {3.3, 4.4}}; // y