2012-05-03 9 views

答えて

0

QQueue<QString> Util::links; 

または

QQueue<QString> Util::links(1); // with constructor parameters if necessary 
+0

「hello world」以外はありません!また、[QQueue](http://qt-project.org/doc/qt-4.8/qqueue.html)にはそのコンストラクタがありません – Shahbaz

1

は、静的メンバ関数を使用してみてください:

#include <QQueue> 
#include <QString> 

class Util { 
public: 

    static QQueue<QString>& links() { 
     static QQueue<QString> instance; 
     static bool is_init = false; 
     if(!is_init) { 
     instance.enqueue("hello world"); 
     is_init = true; 
     } 
     return instance; 
    } 

    Util() { 
    } 
}; 

C++ 11 QQueueているようですShahbazが言ったように、イニシャライザリストをサポートする:

QQueue<QString> Util::links = {"hello world"}; 
+0

マルチスレッドプログラムでは、それを初期化する必要があります複数のスレッドがそのスレッドにアクセスできるようにします。静的オブジェクトには問題はありません。 –

+0

@MikeSeymourええ、静的メンバー関数はこれのための解決策ではありません。 – Pubby

2

あなたが関数の結果でそれを初期化することができます:

QQueue<QString> make_links() { 
    QQueue<QString> queue; 
    queue.enqueue("hello world"); 
    return queue; 
} 

QQueue<QString> Util::links = make_links(); 

私はQTに慣れてないんだけど、一つは、彼らはここで、C++ 11の初期化子リストのサポートを追加していることを願っていかもしれません

QQueue<QString> Util::links {"hello world"}; 

(UPDATE:Shahbazさんのコメント内のリンクによると、あなたは確かにあなたがC++ 11を使用している場合、それを行うことができます)あなたのようにそれを初期化することができると思いますケース。

1

あなたはすべてのそのような場合のために、静的初期化子オブジェクトを使用することができます。

ヘッダファイル:

#include <QQueue> 
#include <QString> 

class Util { 
public: 

    static QQueue<QString> links; 

    Util() { 
    } 
}; 

のcppファイル:

namespace { 
    struct StaticInitializer { 
     StaticInitializer() { 
      Util::links.enqueue("hello world"); 
     } 
    } initializer; 
} 
関連する問題