Qt5:使用QCommandLineParser类时出现奇怪的编译错误

Qt5: Strange compilation error while using QCommandLineParser class

本文关键字:编译 错误 使用 QCommandLineParser Qt5      更新时间:2023-10-16

对于我的应用程序,我必须派生QtCoreApplication并使用QCommandLineParser。我在一个单独的名称空间中声明了QCommandLineOptions实例,并希望在这个名称空间中也声明解析器。然而,我犯了一个我不太理解的错误。

namespace
{
QCommandLineParser parser;

const QCommandLineOption optA("optA", "defaultOptA");
parser.addOption(optA); <-- error: unknown type name 'parser'
}
MyApp::MyApp(int argc, char *argv[])
:QCoreApplication(argc, argv)
{
setApplicationName("My App");
}

我还尝试声明一个QList<QCommandLineOption>,这样我就可以向它添加选项,并使用QCommandLineParser::addOptions将它添加到正在进行的解析器中,但这也不起作用。

namespace
{
QList<QCommandLineOption> options;

const QCommandLineOption optA("optA", "defaultOptA");
options << optA; <-- error: unknown type name 'options'
}
MyApp::MyApp(int argc, char *argv[])
:QCoreApplication(argc, argv)
{
setApplicationName("MyApp);
}

在这两种情况下,我做错了什么?

命名空间声明中不能有像parser.addOption(optA)options << optA这样的表达式。这只是C++的事情,与Qt无关。我建议您将parseroptA变量放在MyApp类中,并在MyApp构造函数中初始化它们

class MyApp : public QCoreApplication
{
...
private:
QCommandLineParser parser;
const QCommandLineOption optA;
};
MyApp::MyApp(int argc, char *argv[])
: QCoreApplication(argc, argv), optA("optA", "defaultOptA")
{
parser.addOption(optA);

...
}