lupdate错误:使用未知的命名空间/类进行限定

arn*_*rne 9 qt translation namespaces internationalization

我使用lupdate v4.7.2遇到了一个非常奇怪的错误.我收到了错误消息

module/foo.cpp:6:使用unknown namespace/class :: foo进行限定

对于一个有大约50个班级的项目中的几个班级.我将问题归结为一个简单的例子:

SRC/project.pro:

QT       += core
TARGET = test
TEMPLATE = app

SOURCES += main.cpp \
           screen.cpp

HEADERS += screen.h

TRANSLATIONS += de.ts
Run Code Online (Sandbox Code Playgroud)

SRC /模块/ foo.h中:

namespace sp {
class foo {
    initWidgets();
};
} // namespace sp
Run Code Online (Sandbox Code Playgroud)

SRC /模块/ Foo.cpp中:

#include <QString>
#include "module/foo.h"

namespace sp {
    foo::initWidgets() {
    QString bar = tr("bar");
}
} // namespace sp
Run Code Online (Sandbox Code Playgroud)

main.cpp中有一个空的main函数.

代码编译(除非我可能在这里产生任何copypasta错误),所以语法基本上是正确的.

arn*_*rne 8

答案是lupdate在解析foo.cpp时无法找到头文件foo.h.使用以下行扩展.pro文件可以解决此问题:

INCLUDEPATH += .
Run Code Online (Sandbox Code Playgroud)

但是,令我困扰的是编译器应该无法编译代码,但不知何故,qmake -I.在编译器选项中添加了一个.这就是为什么我之前没有想到包含文件的问题,花了几个小时来解决这个问题.有谁知道这是否是默认行为?另外:为什么lupdate不会发出相应的错误消息?

  • 我有同样的问题,你的解决方案不能立即为我工作,但指出了我正确的方向.根据[this](https://bugreports.qt-project.org/browse/QTBUG-24587?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel)错误报告,问题的根源是lupdate搜索相对于当前目录的包含文件.在我的情况下,我不得不添加`INCLUDEPATH + = ../ src`,因为当前目录是`./ translations`. (2认同)