0

我有一个动态数组,我用我的类中的一个函数为它分配内存:

double *val;
int n; // dimension

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

但是当我尝试将数据放入 main 中时,我遇到了以下问题:

当我输入:

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 回答