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

+0

Извините, я не могу использовать Qt5 в этом проекте –

ответ

4

Это может быть "статический порядок инициализации облом" (см. here), потому что вы пытаетесь создать статический QString из другого статического QString.

Смежные вопросы