1

私の不気味な英語でごめんなさい。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_;
4

1 に答える 1

5

別の static から static を作成しようとしているため、「静的順序の初期化の大失敗」(こちらを参照) である可能性があります。QStringQString

于 2013-04-11T12:24:42.167 に答える