C++ 错误:<;命令行>;:0:9

C++ 错误:<;命令行>;:0:9,c++,compiler-errors,declaration,C++,Compiler Errors,Declaration,我得到以下错误 # make clean && make all g++ -g3 -funroll-loops -fomit-frame-pointer -m32 -march=pentium3 -mmmx -msse -mfpmath=sse -Wall -Woverloaded-virtual -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -g3 -g -c -DSYS_DAB=0 -DDV

我得到以下错误

# make clean && make all
g++ -g3 -funroll-loops -fomit-frame-pointer -m32 -march=pentium3 -mmmx -msse -mfpmath=sse -Wall -Woverloaded-virtual  -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -g3 -g -c -DSYS_DAB=0 -DDVBAPI_V5 -DNEW_FFMPEG -DDEBUG -DREELVDR -DUSE_PIP -DUSEMYSQL -DDEVICE_ATTRIBUTES -DUSE_CRASHLOG -DUSE_JUMPPLAY -DUSE_LIEMIEXT -DUSE_MCLI -DUSE_PLUGINMISSING -DUSE_SETUP -DUSE_YAEPG -DUSE_BOUQUETS -DUSE_DELAYED_TRICKMODE -DUSE_LIVEBUFFER -DUSE_TINYXML -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_USE_GRAPHTFT -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DAPIVERSNUM=20200 -DDEBUG -DREELVDR -DPLUGIN_NAME='"femon"' -DPLUGIN_NAME_I18N='"femon"' -I./include -I../../../vdr/include -I../../../vdr/include -I/usr/src/linux-headers-4.4.0-47-generic/include/config/dvb/include -I../../../vdr/../tinyxml -I../../../vdr -I../..//usr/src/linux-headers-4.4.0-47-generic/include/config/dvb/include -o femon.o femon.c
<command-line>:0:9: error: expected identifier before numeric constant
<command-line>:0:9: error: expected ‘}’ before numeric constant
<command-line>:0:9: error: expected unqualified-id before numeric constant
In file included from ../../../vdr/include/vdr/dvbdevice.h:13:0,
                 from ../../../vdr/include/vdr/menuitems.h:14,
                 from ../../../vdr/include/vdr/menu.h:18,
                 from femon.c:16:
/usr/include/linux/dvb/frontend.h:345:1: error: expected declaration before ‘}’ token
 };
 ^
===================================================================

以下是
-E
选项的输出:

36348 enum fe_delivery_system {
36349  SYS_UNDEFINED,
36350  SYS_DVBC_ANNEX_A,
36351  SYS_DVBC_ANNEX_B,
36352  SYS_DVBT,
36353  SYS_DSS,
36354  SYS_DVBS,
36355  SYS_DVBS2,
36356  SYS_DVBH,
36357  SYS_ISDBT,
36358  SYS_ISDBS,
36359  SYS_ISDBC,
36360  SYS_ATSC,
36361  SYS_ATSCMH,
36362  SYS_DTMB,
36363  SYS_CMMB,
36364
36365 # 341 "/usr/include/linux/dvb/frontend.h"
36366 0
36367 # 341 "/usr/include/linux/dvb/frontend.h" 3 4
36368        ,
36369  SYS_DVBT2,
36370  SYS_TURBO,
36371  SYS_DVBC_ANNEX_C,
36372 };

您与符号
SYS\u DAB
冲突。您在命令行上将其定义为一个值为0的宏(
-DSYS\u DAB=0
),因此当编译器到达
fe\u delivery\u system
的枚举定义时,它会在应该看到
SYS\u DAB
的地方看到
0


此符号可能用于两个不同的目的,因此您可能需要重命名其中一个-无论哪一个使用最少,您都可以重命名为,例如,
SYS\u\u
,或其他同样具有创造性的东西。

您可能有宏名称冲突-通过预处理器运行代码以查看发生了什么(
g++-E…
).@PaulR它只是通过
g++-E-g3-funroll循环运行-fomit frame pointer-m32-march=pentium3…
。我得到一个链接器警告:
g++:警告:femon.o:链接器输入文件未使用,因为链接未完成。
。你可能留在
-o femon.o
-你只想让预处理器运行,所以使用
g++-E我们的其他选项期望-o…femon.c>femon.src
,然后查看
femon.src
,看看发生了什么。(只需复制并粘贴到命令行即可-不要弄乱makefile。)@PaulR我省略了
-o femon
并添加了
>femon.src
。现在我得到了一个41.519行的文件。它以定义开始,以代码结束。是的,我是手工完成的…好的-因此搜索附近的字符串,例如“fe_delivery_system”,然后查看预处理的枚举定义,看看末尾附近是否有任何错误(大约是
SYS\u TURBO
等等)。这是理解错误的一个很好的方法。我在make
SYS\u DAB=0
中删除了它,它可以工作。非常感谢。很好-很高兴你找到了解决方案!
36348 enum fe_delivery_system {
36349  SYS_UNDEFINED,
36350  SYS_DVBC_ANNEX_A,
36351  SYS_DVBC_ANNEX_B,
36352  SYS_DVBT,
36353  SYS_DSS,
36354  SYS_DVBS,
36355  SYS_DVBS2,
36356  SYS_DVBH,
36357  SYS_ISDBT,
36358  SYS_ISDBS,
36359  SYS_ISDBC,
36360  SYS_ATSC,
36361  SYS_ATSCMH,
36362  SYS_DTMB,
36363  SYS_CMMB,
36364
36365 # 341 "/usr/include/linux/dvb/frontend.h"
36366 0
36367 # 341 "/usr/include/linux/dvb/frontend.h" 3 4
36368        ,
36369  SYS_DVBT2,
36370  SYS_TURBO,
36371  SYS_DVBC_ANNEX_C,
36372 };