2017-09-01 11 views
-5

内部に名前のない構造の構造があります。私は全体の構造体を初期化したい、それはクラス初期化子リストのメンバ構造体です。C++クラスのイニシャライザリストで名前なし構造体を持つメンバstructを初期化するにはどうすればよいですか?

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

名前のないstructを匿名で混乱させてしまったことをお詫び申し上げます。私は、新しいC++ 11の統一構文を認識していませんでした。中括弧を使わないで初期化に関する質問を改善しました。 –

答えて

4

私が正しくあなたを理解していれば、あなたがBarの初期化リストで、unnamed structが含まれているstruct Fooを、初期化したい:

#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 
関連する問題