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

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

该另一个项目是使用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
secmodt.h中的第85行如下所示:
PK11SlotInfo **slots;   /* array of slot points attached to this mod*/

然后在PK11SlotInfo中键入secmodt.h:
typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */

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

是否有人遇到过类似的问题并已解决?

最佳答案

我怀疑您在secmodt.h之前加入了QT。 'slots'是QT moc关键字。

更新

我猜是因为QT是一个受欢迎的库(而且我知道slots的用法)。另外,这种类型的错误看起来像典型的预处理器废话。

QT的#define d'slots'不能与它的元对象编译器一起使用。

您可以:(可能吗?)在secmodt.h之后的某个位置包含QT,或者(可能吗?)add no_keywords to your config —然后向编译器之神祈祷。

09-28 09:36