0

私はC++を初めて使用するので、助けが必要です。私は次のコードを持っています:

struct Force {
    float X[10];
    float Y[10];
    float Z[10];
};

struct Measurement{
    char serial_number[30];
    struct Force F1;
    struct Force F2;
 };

以下を適切に割り当てるにはどうすればよいですか?

struct Measurement meas

問題は、structForceforceが正常に機能することです。ただし、struct Measurement measを定義しようとすると、「未処理の例外」エラーが発生します。

4

3 に答える 3

2

あなたの質問で見たように、あなたはCを使用しているので、ここにCの解決策があります。

構造体Measurementのインスタンスが必要な場合は、次のように入力します。

struct Measurement meas;

そして、次のように構造要素にアクセスできるようになります。

meas.F1.X and so on...

また、動的割り当て(実行時など)が必要な場合は、次のようにmalloc/callocを使用してください。

struct Measurement *meas = (struct Measurement *)malloc(sizeof(struct Measurement));

そのためには、次のように構造要素にアクセスする必要があります。

meas->F1.X and so on...
于 2012-08-10T06:24:41.220 に答える
1

技術的にはあなたが書いたように機能しますが、メンバーには構造体ワードは不要です(実際には警告が生成されますが機能します)。

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);

それで全部です。

于 2012-08-10T06:42:08.747 に答える
0

C:

struct Measurement *meas;
meas=(struct Measurement *) malloc(sizeof(Measurement));
              ^                             ^                         
              |                             |                 
              |                             |                
          this is shape                  this is the space allocated

C ++:

Measurement *meas;
meas=new Measurement;
于 2012-08-10T06:23:57.550 に答える