fuse(用户空间中的文件系统)错误:在'。'标记之前的预期primary-expression

时间:2011-11-09 04:05:31

标签: c++ c fuse

当我编译this helloworld example时,我重复了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 个答案:

答案 0 :(得分:1)

您的编译器太旧了。它需要支持C99。如果编译器足够长,则传入-std = c99

答案 1 :(得分:0)

该语法使用名为指定初始值设定项的C99 language standard的新功能。该功能不是更常见的C89标准(又称ANSI C)的一部分,因此当您尝试编译使用它的代码时,C89编译器会给您语法错误。

要修复它,请告诉编译器使用其C99模式(如果有)。例如,如果您正在使用GCC,则应传递-std=c99编译器选项。如果你的编译器根本不支持C99,你必须切换到编译器,或者重构代码以避免使用C99功能。

答案 2 :(得分:0)

实际上,gcc支持C(或C ++)的新方言。尝试传递gcc -std=c99 -Wall

答案 3 :(得分:0)

遇到类似的错误,虽然我无法通过添加上述评论中提到的“#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);
}