技術的にはあなたが書いたように機能しますが、メンバーには構造体ワードは不要です(実際には警告が生成されますが機能します)。
struct Force {
float X[10];
float Y[10];
float Z[10];
};
struct Measurement {
char serial_number[30];
Force F1;
Force F2;
};
次に、関数で次のように使用します。
Measurement somevar;
somevar.F1.Y = 999;
これを行う(そしてスタックを保存する)適切な方法は、ポインターを使用することです。
struct Measurement {
char serial_number[30];
Force* F1;
Force* F2;
};
その後:
Measurement* m = new Measurement;
if (m) {
m->F1 = new Force;
m->F2 = new Force;
}
使用後は、メモリリークを回避するために、すべてのポインタを削除する必要があります。
delete m->F1;
delete m->F2;
delete m;
別のアプローチがあります。使用:
struct Force {
float X[10];
float Y[10];
float Z[10];
};
struct Measurement {
char serial_number[30];
Force F1;
Force F2;
};
mallocを使用してある程度のメモリを割り当て、それを構造体として扱うことができます(テストする時間がありませんでしたが、私はそのアプローチを何度も使用しています)。
Measurement* m = (Measurement*)malloc(sizeof( size in bytes of both structs ));
// zero memory on m pointer
// after use
free(m);
それで全部です。