2013-04-11 4 views
1

영어로 말하기가 어렵습니다. Qt 4.8.4에서 정적 QString 필드가있는 싱글 톤 클래스를 만들려고합니다. 이 필드는 런타임에 값을 변경하므로 const 일 수 없습니다. 동일한 파일에서 선언 된 상수 QString을 사용하여이 필드를 초기화합니다.정적 QString 초기화에 실패했습니다.

불행하게도 이것은 운영 체제로부터 신호를 수신하기 때문에 열등 정지

LogWay = QString("file.txt"); 

프로그램이 예기치 않게 실수 마무리 작업 및 초기화 문자열하지 않습니다. 신호 이름 : 신호가 의미 SIGSEGV : 분할 오류

파일 "qatomic_i386.h"

에서 내가 잘못하고 무엇? 이 코드 샘플은 int, bool 또는 double 변수에서는 작동하지만 QString에서는 작동하지 않습니다. 왜? 나는 QString 생성자없이 쓰기를 시도했다. 간단한 equating을 사용한다.

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

+0

죄송합니다, Qt5를이 프로젝트에서 사용할 수 없습니다. –

답변

4

입니다 (here 참조). 다른 정적 인 QString에서 정적 인 QString을 생성하려고하기 때문에.

관련 문제