2013-04-11 36 views
1

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

不幸的是,这是不工作,在初始化字符串

LogWay = QString("file.txt"); 

程序意外与错误完成

下等停止,因为它从操作系统接收到信号。 信号名称:SIGSEGV 信号含义:分段故障

文件 “qatomic_i386.h”

我做错了什么?此代码示例使用int,bool或double变量,但不能与QString一起使用。为什么?我试图写没有QString的构造函数,使用简单的等于

LogWay = "..."; 

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

全码:

这是.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);    
} 

}; 

这就是.cpp文件

#include "globalset.h" 
GlobalSet *GlobalSet::GS = NULL; 
QSettings *GlobalSet::_Settings = NULL; 
double GlobalSet::Accuracy = _ACCURACY_; 
QString GlobalSet::LogWay = _LOG_WAY_; 
+0

难道你不能使用QStringLiteral吗? – dtech 2013-04-11 12:13:17

+0

对不起,我不能在这个项目中使用Qt5 – 2013-04-11 12:33:35

回答

4

这可能是 “静态初始化顺序惨败” (请参阅here),因为您正试图从另一个静态QString创建静态QString