静态 QString 初始化失败

Al *_*nte 1 c++ qstring qt static static-members

对不起我令人毛骨悚然的英语。在 Qt 4.8.4 中,我尝试使用静态 QString 字段创建单例类。它不能是 const,因为这个字段会在运行时改变值。通过常量 QString 初始化此字段,在同一文件中声明。

不幸的是,这是行不通的,并且在初始化字符串中

LogWay = QString("file.txt");
Run Code Online (Sandbox Code Playgroud)

程序意外以错误结束

下级停止了,因为它收到了来自操作系统的信号。信号名称:SIGSEGV 信号含义:分段错误

在文件“qatomic_i386.h”中

我做错了什么?此代码示例适用于 int、bool 或 double 变量,但不适用于 QString。为什么?我尝试在没有 QString 构造函数的情况下编写,使用简单的等式

LogWay = "...";
Run Code Online (Sandbox Code Playgroud)

但我有同样的错误。感谢您的帮助。

类的完整代码:

这是 .h 文件 #include

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);             
}

};
Run Code Online (Sandbox Code Playgroud)

这是 .cpp 文件

#include "globalset.h"
GlobalSet *GlobalSet::GS = NULL;
QSettings *GlobalSet::_Settings = NULL;
double GlobalSet::Accuracy = _ACCURACY_;
QString GlobalSet::LogWay = _LOG_WAY_;
Run Code Online (Sandbox Code Playgroud)

cma*_*t85 5

它可能是“静态订单初始化失败”(请参阅此处),因为您正试图QString从另一个 static创建一个static QString