C++ 用户';在神秘的情况下,QCoreApplication的参数为空

C++ 用户';在神秘的情况下,QCoreApplication的参数为空,c++,linux,qt,segmentation-fault,console-application,C++,Linux,Qt,Segmentation Fault,Console Application,我试图用Qt创建一个控制台应用程序,在尝试检索参数时遇到了非常奇怪的行为。我的类来自QCoreApplication,它有一个函数,通常应该将所有参数放在字符串的某个列表中。但在某些情况下,调用以分段错误结束 代码如下: main.cpp #include "Diagramm.h" int main(int argc, char *argv[]) { Diagramm application(argc, argv); application.run(); return

我试图用
Qt
创建一个控制台应用程序,在尝试检索参数时遇到了非常奇怪的行为。我的类来自
QCoreApplication
,它有一个函数,通常应该将所有参数放在
字符串的某个列表中。但在某些情况下,调用以分段错误结束

代码如下:

main.cpp

#include "Diagramm.h"

int main(int argc, char *argv[])
{
    Diagramm application(argc, argv);
    application.run();
    return EXIT_SUCCESS;
}
图表h

#include <QCoreApplication>
#include <iostream>
#include <QStringList>
#include <QFile>
#include <QDebug>


class Diagramm : public QCoreApplication
{
    Q_OBJECT

    public:
        Diagramm(int argc, char *argv[]);
        void run();
    private:
        void testArguments();
    signals:
    public slots:
};
#包括
#包括
#包括
#包括
#包括
类图:公共QCoreApplication
{
Q_对象
公众:
图表(int-argc,char*argv[]);
无效运行();
私人:
无效测试参数();
信号:
公众时段:
};
diagram.cpp

#include "Diagramm.h"

Diagramm::Diagramm(int argc, char *argv[]) : QCoreApplication(argc, argv)
{
    //std::cout << "calling Diagramm constructor" << std::endl;
}

void Diagramm::run()
{
    testArguments();
}

void Diagramm::testArguments()
{
    //get source and target files from arguments
    QStringList arguments = this->arguments();

    if(arguments.count() < 2)
    {
        std::cout << "Missing arguments" << std::endl;
        return exit(1);
    }
}
#包括“diagram.h”
diagram::diagram(int-argc,char*argv[]):QCoreApplication(argc,argv)
{
//std::cout是一个静态函数,因此该行应为:

QStringList arguments = QCoreApplication::arguments();
Q(核心)应用程序需要引用
argc
argv
,因此构造函数应该

Diagramm(int& argc, char **argv[])

如果您不注意这一点,它可能会在某些情况下工作,并在其他情况下导致错误或奇怪的行为,正如您遇到的。这似乎是一个常见错误,在阅读文档时不容易发现。

这确实更清楚,但在其他情况下不会有任何区别。就是这样。非常感谢!对于其他情况,上面的代码应该是:(在main.cpp中)
diagram应用程序(argc和argv);
(在diagram.cpp中)
diagram::diagram(int和argc,char**argv[]):QApplication(argc,*argv)