当我编译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);
}
答案 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);
}