2017-09-01 65 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