繁体   English   中英

静态QString初始化失败

[英]Static QString initialization fail

对不起我令人毛骨悚然的英语 在Qt 4.8.4中,我尝试使用静态QString字段创建单例类。 它不能是const,因为该字段将在运行时更改值。 通过在同一文件中声明的常量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_;

这可能是“静态初始化顺序惨败”(见这里 ),因为你正在试图建立一个静态QString从另一个静态QString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM