对数组类型为的表达式赋值时出错 我有一个函数名为“代码> un包装< /COD>,编译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; }
我将这些错误传播到代码的每一行:对数组类型为的表达式赋值时出错 我有一个函数名为“代码> un包装< /COD>,编译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; },c++,c,pointers,variable-assignment,C++,C,Pointers,Variable Assignment,我将这些错误传播到代码的每一行: .../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库中获取的。我曾尝试使用外部
.../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库中获取的。我曾尝试使用外部程序
,但似乎效果不太好。现在,当我make
original repository()时,它的编译似乎没有问题。包含并使用此代码的TinyEKF的compile命令是:
gcc-Wall-I.-I..//src-o-gps\u-ekf-gps\u-ekf.c..//src/tiny\u-ekf.c-lm
这可以在存储库中的/extras/c/
中找到,并且肯定会使用解包功能 根据,ekf.x
属于double x[]
类型。你不能只分配给一个数组,比如ekf->x=dptr代码>,如错误所示。如果要将数据从dptr
复制到ekf->x
,可以使用memcpy
:
memcpy(&ekf->x, dptr, sizeof(ekf->x));
所有其他赋值也一样,大多数字段都是双数组。请提供类/结构ekf\t的定义。只需将其编译为C,不是C++,当然你仍然可以将它与C++代码联系起来。确保代码< > x>代码>和<>代码> p>代码>类型:字段在代码> EKFFYT 中是双代码>双*< /代码>指针。所有这些成员都是数组,并且不能分配给数组。拿起一本好的入门书。不是……这是我不懂的。如果它适用于存储库中给出的示例,那么我只是在我的程序中重新创建相同的东西。它不应该工作吗?我相信它们在原始代码中也是数组,被分配给一个double。这就是我困惑的原因。这发生在哪个示例文件中?看一看会很有趣。如果你看一下/extras/c,有一个GPS示例使用它,并且没有抛出错误。它现在编译,以检查它是否以我们希望的方式运行。