在';'标记之前预期的非限定标识

时间:2011-09-03 10:25:33

标签: c++ cmake

我似乎有一个奇怪的问题:

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

这个其他项目是使用CMake编译的。所以我告诉CMake将/usr/include/nspr添加到包含路径并使用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

secmodt.h中的第85行如下所示:

PK11SlotInfo **slots;   /* array of slot points attached to this mod*/

PK11SlotInfo中的secmodt.h是typedef的:

typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */

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

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

1 个答案:

答案 0 :(得分:5)

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

<强>更新

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

QT的#define d'插槽'无法与其元对象编译器一起使用。

你可以:(可能吗?)在secmodt.h(可能?)add no_keywords to your config之后的某个时刻包括QT - 然后向编译器神祈祷。< / p>