对于我的应用程序,我必须派生QtCoreApplication并使用QCommandLineParser。我在单独的命名空间中声明了QCommandLineOptions实例,并希望在此 namespace 中声明解析器。但是我收到了一个我不太理解的错误。
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);
}
在这两种情况下我都做错了什么? 最佳答案
namespace 声明中不能包含parser.addOption(optA)
或options << optA
之类的表达式。这只是C++,与Qt无关。我建议您宁愿将parser
和optA
变量放入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);
...
}