C++ C++;

C++ C++;,c++,dynamic,array-initialization,C++,Dynamic,Array Initialization,我有一个动态数组,我用类中的函数为其分配内存: 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 : mis

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

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;

它很好用。有人知道为什么吗?

您只能以这种方式初始化数组:

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);
}
void alloc(int nn){//向量的内存分配
n=nn;
val=新的双精度[n];
//一种选择是:
对于(int i=0;i
只能以这种方式初始化数组:

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);
}
void alloc(int nn){//向量的内存分配
n=nn;
val=新的双精度[n];
//一种选择是:
对于(int i=0;i
a.val[3]={1.0,1.0,1.0}

这仅适用于初始化

在本例中,您首先动态地分配了进行初始化的空间

这会奏效的

float val[3]={1.0,1.0,1.0};

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

这仅适用于初始化

在本例中,您首先动态地分配了进行初始化的空间

这会奏效的

float val[3]={1.0,1.0,1.0};

只能使用{data}进行初始化 但如果仍要使用此设置多个值,请尝试以下操作:

double values[3] = {1.0, 2.0, 3.0};
memcpy(&(a.val), &values, sizeof(values));

只能使用{data}进行初始化 但如果仍要使用此设置多个值,请尝试以下操作:

double values[3] = {1.0, 2.0, 3.0};
memcpy(&(a.val), &values, sizeof(values));

双精度阵列。两个人都应该做同样的事,不是吗?我知道a.val[3]={1.0,1.0,1.0};版本通常是正确的..双精度数组。两个人都应该做同样的事,不是吗?我知道a.val[3]={1.0,1.0,1.0};版本通常是正确的。数组是在类内部初始化的,我已经编辑了我的答案以显示它。@System正如我在答案中所说的,当您在中为数组分配内存时,数组已经初始化,
val=new double[n]@System查看此选项,而不是唯一选项。还有和。@BenjaminLindley谢谢!我在答案中添加了替代选项。数组是在类中初始化的,我编辑了我的答案以显示它。@System正如我在答案中所说,当您在中为数组分配内存时,数组已经初始化,
val=new double[n]@System查看此选项,而不是唯一选项。还有和。@BenjaminLindley谢谢!我在答案中添加了其他选项,但我希望向量与一个特定的对象链接,在本例中是a。我该怎么做?你说的确实有效,我的程序得到的结果是正确的,但是当我打印a.val[1]时,例如,我得到一个非常大(而且是错误的)的数字。但是我希望向量与一个特定的对象链接,在这种情况下是a。我该怎么做?你说的确实有效,我的程序得到的结果是正确的,但是当我打印a.val[1]时,我得到了一个非常大(而且是错误的)的数字。