关于C++:静态QString初始化失败

Static QString initialization fail

对不起,我的英语太恐怖了。在Qt4.8.4中,我尝试用静态qString字段创建singleton类。它不能是常量,因为此字段将在运行时更改值。通过常量qstring初始化此字段,并在同一文件中声明。

不幸的是,这不起作用,在初始化字符串中

1
LogWay = QString("file.txt");

程序意外地错误完成

The inferior stopped because it received a signal from the Operating System.
Signal name: SIGSEGV
Signal meaning : Segmentation fault

文件"qatomic_i386.h"

我做错了什么?此代码示例使用int、bool或double变量,但不使用qstring。为什么?我尝试不使用qstring构造函数编写,使用简单的等式

1
LogWay ="...";

但我也有同样的错误。谢谢你的帮助。

课程完整代码:

这是.h文件包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
const double _ACCURACY_ = 0.0001;
static const QString _LOG_WAY_ ="GrafPrinterLog.txt";

class GlobalSet
{
private:
static QSettings *_Settings;
GlobalSet(){}
GlobalSet(const GlobalSet&){}
GlobalSet &operator=(const GlobalSet&);

static GlobalSet *GS;

public:
static double IntToCut;
static double ReplaceSize;
static double Accuracy;
static int MaxPointCount;
static bool NeedProper;
static QString LogWay;

~GlobalSet();

static GlobalSet *Instance()
{
    if (GS == NULL)
    {
        GS = new GlobalSet();
        GS->firstSetUp();
    }
    return GS;
}


void firstSetUp()
{        
    Accuracy = _ACCURACY_;
    LogWay = QString("file.txt");//fail is here!
    NeedProper = false;
    _Settings = new QSettings("options.ini",QSettings::IniFormat);            
}

};

这是.cpp文件

1
2
3
4
5
#include"globalset.h"
GlobalSet *GlobalSet::GS = NULL;
QSettings *GlobalSet::_Settings = NULL;
double GlobalSet::Accuracy = _ACCURACY_;
QString GlobalSet::LogWay = _LOG_WAY_;


它可能是"静态顺序初始化失败"(见这里),因为您试图从另一个静态QString创建一个静态QString