生成错误 - "." 标记之前的预期主表达式

build error - expected primary-expression before '.' token

本文关键字:表达式 错误      更新时间:2023-10-16

我正在尝试在此程序上运行make命令,但是我遇到了可能与C++有关的错误。错误如下:

make
[  7%] Building CXX object CMakeFiles/m3vcftools.dir/src/Main.cpp.o
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:26: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:27: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:28: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:31: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:32: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:33: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:35: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:36: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:37: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:39: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:40: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:41: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:43: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:44: error: expected primary-expression before '.' token
/hpc/home/lsiwzyj/programs/m3vcftools/src/Main.cpp:45: error: expected primary-expression before '.' token
make[2]: *** [CMakeFiles/m3vcftools.dir/src/Main.cpp.o] Error 1
make[1]: *** [CMakeFiles/m3vcftools.dir/all] Error 2
make: *** [all] Error 2

以下是main.cpp中相关行的片段:

static void usage(FILE *fp);
//const char* createCommandLine(convert_args_t *args, const char *optionName); 
int main_m3vcfconcat(int argc, char *argv[]);
int main_m3vcfcompress(int argc, char *argv[]);
int main_m3vcfconvert(int argc, char *argv[]);

typedef struct
{
int (*func)(int, char*[]);
const char *alias, *help;
}
cmd_t;
static cmd_t cmds[] =
{
{ .func  = NULL,
.alias = "M3VCF manipulation",
.help  = NULL
},
{ .func  = main_m3vcfcompress, //main_vcfannotate,
.alias = "compress",
.help  = "compress VCF file to M3VCF",
},
{ .func  = main_m3vcfconcat, //main_vcfconcat,
.alias = "concat",
.help  = "concatenate M3VCF files from the same set of samples"
},
{ .func  = main_m3vcfconvert, //main_vcfconvert,
.alias = "convert",
.help  = "convert M3VCF files to different formats and back"
},
{ .func  = NULL,
.alias = NULL,
.help  = NULL
}
};

不过.cpp我很担心更改 Main 中的任何行,而且我不熟悉C++。你知道我该如何解决这个问题吗?谢谢。

使用指示符初始化结构在相当长的一段时间内具有C的特性,但直到C++20迭代时才进入C++

因此,您需要确保拥有能够处理C++20的编译器。

根据您使用的工具链,您可能需要特定版本,例如:

  • GCC 8+,GCC10--std=c++20,GCC 8/9--std=c++2a;
  • 叮当 10+,带--std=c++20;
  • Microsoft VS2019 16.1+,/std:c++latest/std:c++20(最终(。

鉴于您遇到的错误,我怀疑您要么没有这样的野兽,要么它的配置方式有问题(例如不正确的标准规格(。