【问题标题】:expected unqualified-id before ‘;’ token';' 标记之前的预期 unqualified-id
【发布时间】:2011-09-03 10:25:33
【问题描述】:

我好像遇到了一个奇怪的问题:

我用 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*/

PK11SlotInfo 是在secmodt.h 中定义的:

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

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

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

【问题讨论】:

    标签: c++ cmake


    【解决方案1】:

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

    更新

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

    QT 的 #defined 'slots' 用于其元对象编译器。

    您可以:(可能?)在secmodt.h(可能?)add no_keywords to your config 之后的某个时间点包含 QT——然后向编译器之神祈祷。

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 2013-07-06
      • 1970-01-01
      相关资源
      最近更新 更多