2010-12-01 3 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=() - это особый синтаксис, который по сути совпадает с вызовом конструктора.

Что-то подобное может работать

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

где EmptyList() является

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

и является копией построение списка, и за исключением некоторых оптимизации, копия списка, который создается ,

+2

Спасибо. Я использовал что-то похожее на то, что вы предоставили. Вместо пустого списка я использовал новый QList () << ...; Кажется, это работает. Вы видите какие-либо потенциальные проблемы при использовании этого метода? – dfetter88 2010-12-01 02:39:39

1

Эта линия не является инициализацией/определением QList Cube :: colorList. Он вызывает оператор вставки объекта, который еще не определен (QList Cube :: colorList).

Я не знаю QT и поэтому не могу прокомментировать, как действительно инициализировать этот класс.

Смежные вопросы