2010-12-01 21 views
5

私は次のエラーを取得する:静的なQListを初期化できませんか?

Cube.cpp:10: error: expected initializer before ‘<<’ token

は、ここでヘッダファイルの重要な部分です:

#ifndef CUBE_H 
#define CUBE_H 

#include <cstdlib> 
#include <QtCore/QtCore> 
#include <iostream> 

#define YELLOW 0 
#define RED 1 
#define GREEN 2 
#define ORANGE 3 
#define BLUE 4 
#define WHITE 5 

using namespace std; 

class Cube { 
public: 
    ... 
    static QList<int> colorList; 
    ... 
}; 
#endif 

ここでエラーになるラインです:

QList<int> Cube::colorList << YELLOW << RED << GREEN << ORANGE << BLUE << WHITE; 

答えて

7

<<でオブジェクトを初期化することはできません。 =には通常operator=()はありません。これはコンストラクタを呼び出すのと本質的に同じ特殊な構文です。

このような何かがEmptyListは()

QList<int> EmptyList() 
{ 
    QList<int> list; 
    return list; 
} 

で、リストのコピーの構築であり、いくつかの最適化、作成されたリストのコピーを禁止する

QList<int> Cube::colorList = EmptyList() << YELLOW << RED << GREEN << ORANGE << BLUE << WHITE; 

を働くかもしれません。

+2

ありがとうございました。私はあなたが提供したものに似た何かを使用しました。空リストの代わりに、私は新しいQList ()を使用しました<< ...;それは動作するようです。この方法を使用する際に潜在的な問題がありますか? – dfetter88

+0

リストを作成してそれをコピーするだけです。そのような短いリストのために、アプリで一度だけ、私はそれについて心配しないだろう。 –

1

その行は、 QList Cube :: colorListの初期化/定義ではありません。つまり、まだ定義されていないオブジェクト(QList Cube :: colorList)に対して挿入演算子を呼び出しています。

私はQTを知らないので、実際にこのクラスを初期化する方法についてはコメントできません。

関連する問題