Qt5: странная ошибка компиляции при использовании класса QCommandLineParser - PullRequest
0 голосов
/ 13 июля 2020

Для моего приложения мне пришлось получить 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>, чтобы я мог добавить к нему параметры и добавить его в парсер на go используя 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);

}

Что я делаю не так в обоих случаях?

1 Ответ

2 голосов
/ 13 июля 2020

Вы не можете использовать такие выражения, как 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);
    
    ...
}
...