2017-08-23 8 views
2

Cでネストされた構造体のコードをC++に移植しようとしています。私はC++で内部構造体の型が外部構造体のメンバになることを知っています。私の場合は、型がない内部構造体(*と表示されています)があり、struct2をコンパイラに完全に指定する方法はわかりません。C++で匿名型をネストした構造

typedef struct struct1 
{ 
    struct // * 
    { 
     struct struct2 
     { 
      int bla; 
      int bla2; 
     } *array; 

     int bla3; 

    } list; 

    int bla4; 

} struct1_t; 


int main() 
{ 
    struct1_t *st = new struct1_t(); 

    st->bla4 = 10; 
    st->list.bla3 = 45; 

    // ? 
    st->list.array = new struct1_t::struct2(); 


    return 0; 
} 

編集:上記の構造コードはASN1コンパイラによって自動的に生成され、変更することはできません。

+0

を。 typedefへのエイリアス宣言を推奨します。構造体はC++のクラスです。 – Ron

+0

とstructsはとにかくC++の型です – pm100

+1

"型のない構造体"ではなく、匿名のstruct型です。しかし、あなたの問題が何であるかははっきりしていません。変数宣言から分離された適切な名前を持つ通常の定義を書くだけです。 – VTT

答えて

3

これは私のためのC++ 11で動作します:あなたはその後、Cは `構築typedef`ことを放棄考えるC++の方法でC++を使用する場合

st->list.array = new decltype(struct1_t::list)::struct2; 
関連する問題