在';'之前预期的不合格ID 代币

phi*_*mue 0 c++ cmake

我好像有一个奇怪的问题:

我用C++(使用Eclipse CDT)编写了一个使用Mozilla的Netword安全服务的应用程序.这个应用程序运行正常,所以我想我可以将适当的类/标题/源移动到另一个项目(通常可以这样做吗?).原始项目使用位于/usr/include/nspr和的一些额外标题libnss3.

这个其他项目是使用CMake编译的.所以我告诉CMake添加/usr/include/nspr到include路径并使用libnss3.但是,当我尝试使用其他项目中的类时,编译时出现以下错误:

In file included from some-dir/src/import/FirefoxImporter.h:21:0,
                 from some-dir/src/import/Import_Firefox.h:26,
                 from some-dir/src/mainwindow.cpp:28:
/usr/include/nss/secmodt.h:85:25: error: expected unqualified-id before ‘;’ token
Run Code Online (Sandbox Code Playgroud)

第85行secmodt.h看起来如下:

PK11SlotInfo **slots;   /* array of slot points attached to this mod*/
Run Code Online (Sandbox Code Playgroud)

并且PK11SlotInfo是typedef'd in secmodt.h:

typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */
Run Code Online (Sandbox Code Playgroud)

但是,我无法secmodti.h在我的系统上找到(但是,原始程序编译并执行得很好).

有没有人遇到类似的问题并解决了它们?

jus*_*tin 5

我怀疑你在secmodt.h之前已经包含了QT.'slots'是QT moc关键字.

更新

我猜这是因为QT是一个受欢迎的图书馆(我知道它的用法slots).此外,这种类型的错误看起来像典型的预处理器废话.

QT的#define"插槽"与其元对象编译器无关.

您可以:(可能?)在某个时刻包含QT secmodt.h,或者(可能?)添加no_keywords到您的配置中 - 然后向编译器之神祈祷.