'; '令牌前预期的非限定id

expected unqualified-id before ‘;’ token

本文关键字:id 令牌      更新时间:2023-10-16

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

我用c++编写了一个应用程序(使用Eclipse CDT),它使用Mozilla的网络安全服务。这个应用程序运行良好,所以我想我可以把适当的类/头/源移动到另一个项目(这通常可以做到吗?)。原项目在/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*/

PK11SlotInfosecmodt.h:

中的类型定义
typedef struct PK11SlotInfoStr PK11SlotInfo; /* defined in secmodti.h */

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

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

我怀疑您在secmodt.h之前包含了QT。'slots'是一个QT moc关键字。

我猜这是因为QT是一个流行的库(我知道它使用slots)。另外,这种类型的错误看起来像是典型的预处理错误。

QT的#define d '插槽'没有使用它的元对象编译器。

您可以:(可能?)在secmodt.h之后的某个点包括QT, (可能?)将no_keywords添加到您的配置中-然后向编译器祈祷。