Static QString initialization fail
对不起,我的英语太恐怖了。在Qt4.8.4中,我尝试用静态qString字段创建singleton类。它不能是常量,因为此字段将在运行时更改值。通过常量qstring初始化此字段,并在同一文件中声明。
不幸的是,这不起作用,在初始化字符串中
1 | LogWay = QString("file.txt"); |
程序意外地错误完成
The inferior stopped because it received a signal from the Operating System.
Signal name: SIGSEGV
Signal meaning : Segmentation fault
文件"qatomic_i386.h"
我做错了什么?此代码示例使用int、bool或double变量,但不使用qstring。为什么?我尝试不使用qstring构造函数编写,使用简单的等式
1 | LogWay ="..."; |
但我也有同样的错误。谢谢你的帮助。
课程完整代码:
这是.h文件包括:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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文件
1 2 3 4 5 | #include"globalset.h" GlobalSet *GlobalSet::GS = NULL; QSettings *GlobalSet::_Settings = NULL; double GlobalSet::Accuracy = _ACCURACY_; QString GlobalSet::LogWay = _LOG_WAY_; |
它可能是"静态顺序初始化失败"(见这里),因为您试图从另一个静态