0

クラス内の関数でメモリを割り当てる動的配列があります。

double *val;
int n; // dimension

void alloc (int nn) { // memory allocation for vector
    n = nn;
    val = new double[n];
}

しかし、データをメインに入れようとすると、次の問題が発生します。

入力すると:

a.val[3] = {1.0 , 1.0 , 1.0};

次の非常にあいまいなエラーが発生します。

syntax error : missing ';' before '{'
syntax error : '{'

しかし、私が入力すると:

a.val[1]=1.0;
a.val[2]=1.0;
a.val[3]=1.0;

それはうまく動作します。誰でも理由がわかりますか?

4

3 に答える 3

3

その方法でのみ配列を初期化できます。

double a[3] = {1.0, 1.0, 1.0};

あなたの選択肢は次のとおりです。

void alloc (int nn) { // memory allocation for vector
    n = nn;
    val = new double[n];

    // one option is:
    for (int i = 0; i < n; i++)
    {
        val[i] = 1.0;
    }    

    // or you can also do: (thanks to Benjamin)
    std::fill_n(val, n, 1.0);

    // or:
    std::fill(val, val + n, 1.0);
}
于 2012-06-16T15:44:30.420 に答える
1

a.val[3] = {1.0 , 1.0 , 1.0};

これは初期化でのみ機能します。

あなたの場合、最初に初期化が行われる間にスペースを動的に割り当てました。

これはうまくいきます

float val[3]={1.0,1.0,1.0};
于 2012-06-16T15:44:33.010 に答える
0

初期化には {data} しか使用できませんが、複数の値を設定するためにこれを使用したい場合は、これを試してください:

double values[3] = {1.0, 2.0, 3.0};
memcpy(&(a.val), &values, sizeof(values));
于 2012-06-16T16:46:05.080 に答える