3

我正在尝试在我的 Qt 项目中使用 Xapian 库。我刚刚添加了标题:

#include <QtCore/QCoreApplication>
#include <xapian.h>

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);   

    return a.exec();
} 

这里已经有一些错误:

/usr/local/include/xapian/keymaker.h:64: error: a template-id may not appear in 
a using-declaration
64: std::vector<std::pair<Xapian::valueno, bool> > slots;

还有这个:

/usr/local/include/xapian/keymaker.h:77: error: expected primary-expression 
before ‘.’ token
77: slots.push_back(std::make_pair(slot, reverse));

我不知道这是什么意思。但我想我应该在我的个人资料中添加一些东西。请你帮助我好吗?谢谢。

4

1 回答 1

4

您遇到的问题是 Xapian 使用“插槽”作为标识符,但“插槽”也是 Qt 中的定义:

来自 qobjectdefs.h

# if defined(QT_NO_KEYWORDS)
#  define QT_NO_EMIT
# else
#   define slots
#   define signals protected
# endif

当您在 xapian.h 之前包含 QApplication(以及因此 qobjectdefs.h)时,预处理器会从 xapian.h 中删除所有出现的“槽”。为避免此问题,请使用 -DQT_NO_KEYWORDS 构建您的项目。然后,您必须在 Qt 代码中使用“Q_SLOTS”和“Q_SIGNALS”而不是“信号”和“插槽”(无论如何这是一个好习惯)。

于 2011-06-19T09:09:32.477 回答