2

次の構造体を定義します

struct CCPtDist
{
  double[] wDist = new double[8];
};

そして、tmpPtDistという「CCPtDist」変数を作成し、wDistにdoubleの数値を割り当てたいと思います。

CCPtDist tmpPtDist;
tmpPtDist.wDist[0] = 233.7;

しかし、g++コンパイラはエラーを返します。「structCCPtDist」には「wDist」という名前のメンバーがありませんか?

4

3 に答える 3

4

Cスタイルの配列の代わりに、次を使用できますstd::array

#include <array>

struct CCPtDist
{
  std::array<double,8> wDist;
};

int main()
{   
  CCPtDist tmpdist;
  tmpdist.wDist[0]=233.7;
}
于 2012-08-23T03:21:34.510 に答える
1

コードには多くの問題があります。まず、配列をメンバーとして宣言すると、メモリは構造体の一部としてインラインで割り当てられます。それに任意のポインタを割り当てることはできません。第二に、とにかく配列を正しく宣言したとは思いません。第三に、そのような複雑な初期化をコンストラクターに入れる必要があります。その行でコンパイルエラーが発生しないことに驚いていますdouble[] wDist = new double[8];

このようなものに変更してみてください

struct CCPtDist
{
    double* wDist;

    CCPtDist(): wDist(new double[8]) {}
};
于 2012-08-23T03:17:00.570 に答える
0

構造体の一部として固定サイズ(!)の配列が必要な場合は、動的な割り当て(つまりnew)は必要ありません。

struct CCPtDist
{
  double wDist[8];
};

十分であろう。ただし、この配列の8つの値はこの方法では初期化されないことに注意してください。それらにはランダムなゴミが含まれます。したがって、配列を初期化するコンストラクターを追加することをお勧めします。

struct CCPtDist
{
  double wDist[8];
  CCPtDist():wDist() {}
};

コンパイラがそれをサポートしている場合std::arrayは、SRNの回答で説明されているように、C++11で導入されたを使用する方が良いアプローチかもしれません。

于 2012-08-23T03:31:08.223 に答える