我正在尝试在我的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));
我不知道这是什么意思。但我想我应该在我的亲文件中添加一些内容。请你帮助我好吗?感谢。
答案 0 :(得分:4)
您遇到的问题是Xapian使用“slots”作为标识符,但“slots”也是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中删除所有出现的“slots”。 要避免此问题,请使用-DQT_NO_KEYWORDS构建项目。 然后你必须在你的Qt代码中使用“Q_SLOTS”和“Q_SIGNALS”代替“signals”和“slots”(无论如何这都是好的做法)。