错误分配给具有数组类型的表达式

时间:2019-03-20 07:49:27

标签: c++ c pointers variable-assignment

我有一个名为unpack的函数,编译C ++代码会导致几个错误。代码如下:

static void unpack(void *v, ekf_t *ekf, int n, int m) {
    /* skip over n, m in data structure */
    char *cptr = (char *) v;
    cptr += 2 * sizeof(int);

    double *dptr = (double *) cptr;
    ekf->x = dptr;
    dptr += n;
    ekf->P = dptr;
    dptr += n * n;
    ekf->Q = dptr;
    dptr += n * n;
    ekf->R = dptr;
    dptr += m * m;
    ekf->G = dptr;
    dptr += n * m;
    ekf->F = dptr;
    dptr += n * n;
    ekf->H = dptr;
    dptr += m * n;
    ekf->Ht = dptr;
    dptr += n * m;
    ekf->Ft = dptr;
    dptr += n * n;
    ekf->Pp = dptr;
    dptr += n * n;
    ekf->fx = dptr;
    dptr += n;
    ekf->hx = dptr;
    dptr += m;
    ekf->tmp0 = dptr;
    dptr += n * n;
    ekf->tmp1 = dptr;
    dptr += n * m;
    ekf->tmp2 = dptr;
    dptr += m * n;
    ekf->tmp3 = dptr;
    dptr += m * m;
    ekf->tmp4 = dptr;
    dptr += m * m;
    ekf->tmp5 = dptr;
}

我将这些错误传播到代码的每一行:

.../src/ekf.c:203:12: error: assignment to expression with array type
     ekf->x = dptr;
            ^
.../src/ekf.c:205:12: error: assignment to expression with array type
     ekf->P = dptr;

应注意,代码unpack是从C库中获取的。我曾尝试使用extern,但这似乎不太好用。现在,当我make原始存储库(https://github.com/simondlevy/TinyEKF)时,它似乎可以毫无问题地进行编译。 TinyEKF的编译命令(包含并使用此代码)为:

gcc -Wall -I. -I../../src -o gps_ekf gps_ekf.c ../../src/tiny_ekf.c -lm

可以在存储库的/extras/c/中找到它,并且肯定使用了unpack函数。

1 个答案:

答案 0 :(得分:1)

根据thisekf.x的类型为double x[]。如错误所示,您不能只分配给像ekf->x = dptr;这样的数组。如果要将数据从dptr复制到ekf->x,可以使用memcpy

memcpy(&ekf->x, dptr, sizeof(ekf->x));

所有其他分配也是如此,其中大多数字段是double数组。