У меня есть функция с именем 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
.