問題があります: 次の C++ コード (C スタイルの構造体を使用) を使用すると、次のエラーが発生します。
elements of partially initialized array must have a default constructor
の残りの要素を暗黙的に初期化する方法がわからないことについて話しているとtest.a
思いますが、それを修正する方法がわかりません。おそらく、単純にコンストラクターを追加する必要がありますが、構造体の定義を変更する必要はありません (これは、私が直面している実際の問題の単純な例にすぎません)。
typedef struct inner_t
{
const char* a;
const int b;
const char* c[6];
} inner;
typedef struct outer_t
{
const inner a[10];
} outer;
int main()
{
outer test = {{
{ "hi!", 0, { "1", "2", "3", "4", "5", ""} },
{ "", -1, { "" } }
}};
return 0;
}
手動で初期化した要素の後に何が来るかは気にしません。エラーが発生しないことだけを気にします。
助けてくれてありがとう!
編集:デフォルトのコンストラクターを追加すると、次のinner
ようになります:
typedef struct inner_t
{
/* previous stuff */
inner_t() : a(""), b(-1) { }
}
その後、さらにエラーが発生します。
initialization with '{...}' is not allowed for object of type "const inner"
さまざまなコンストラクターを追加しようとしましたが、役に立ちませんでした。私が理解していないのは、C スタイルの構造体にデフォルトのコンストラクターがない理由です。