Извините за мой жуткий английский. В 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_;
Вместо этого вы не можете использовать QStringLiteral? – dtech
Извините, я не могу использовать Qt5 в этом проекте –