영어로 말하기가 어렵습니다. 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_;
대신 QStringLiteral을 사용할 수 없습니까? – dtech
죄송합니다, Qt5를이 프로젝트에서 사용할 수 없습니다. –