Ошибка fuse (Файловая система в пользовательском пространстве): ожидаемое первичное выражение перед '.'знак - PullRequest
0 голосов
/ 09 ноября 2011

Когда я компилирую этот пример helloworld , я получаю следующую ошибку 4 раза:

error: expected primary-expression before ‘.’ token

Вот код:

static struct fuse_operations hello_oper = {
    .getattr    = hello_getattr,
    .readdir    = hello_readdir,
    .open   = hello_open,
    .read   = hello_read,
};

int main(int argc, char *argv[])
{
    return fuse_main(argc, argv, &hello_oper);
}

Ответы [ 4 ]

1 голос
/ 09 ноября 2011

Ваш компилятор слишком стар. Нужно поддерживать C99. Передайте -std = c99, если компилятор достаточно текущий

0 голосов
/ 23 сентября 2017

Наткнулся на похожую ошибку, хотя мне не удалось ее преодолеть, добавив "#define FUSE_USE_VERSION ...", как упомянуто в одном из комментариев выше.

Чтобы устранить эту ошибку, я написал оболочкувокруг fuse_operations следующим образом:

struct my_operations: public fuse_operations {
   my_operations()
   {
        read = my_read;
        open = my_open;
   }
} operations;

main(int argc, char* argv[])
{
  return fuse_main(argc, argv, &operations, NULL);
}
0 голосов
/ 09 ноября 2011

На самом деле, gcc поддерживает более новые диалекты C (или C ++).Попробуйте передать его gcc -std=c99 -Wall

0 голосов
/ 09 ноября 2011

Этот синтаксис использует новую функцию стандарта языка C99 , называемую назначенными инициализаторами .Эта функция не является частью более распространенного стандарта C89 (он же ANSI C), поэтому компилятор C89 выдаст вам синтаксические ошибки при попытке скомпилировать код, который его использует.

Чтобы исправить это, скажите вашему компилятору:используйте режим C99, если он есть.Например, если вы используете GCC, вы должны передать опцию компилятора -std=c99.Если ваш компилятор вообще не поддерживает C99, вам придется либо переключиться на компилятор, который это делает, либо реорганизовать код, чтобы избежать использования функций C99.

...