2013-04-11 84 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