2010-12-01 20 views
5

me sale el siguiente error:¿No se puede inicializar QList estática?

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

He aquí las partes importantes del archivo de cabecera:

#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 

Aquí está la línea que da el error:

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

Respuesta

7

No se puede inicializar un objeto con <<. El = que suele estar allí no es operator=() - es una sintaxis especial que es esencialmente lo mismo que llamar a un constructor.

Algo como esto podría funcionar

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

donde EmptyList() es

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

y es una construcción copia de una lista, y salvo alguna optimización, una copia de la lista que se crea .

+2

Gracias. Usé algo similar a lo que has proporcionado. En lugar de la lista vacía, utilicé la nueva QList () << ...; Parece funcionar. ¿Ve algún problema potencial al usar este método? – dfetter88

+0

Solo que está creando una lista y luego copiándola. Para una lista tan corta y solo por una vez en la aplicación, no me preocuparía. –

1

Esa línea no es una inicialización/definición de QList Cube :: colorList. Está invocando el operador de inserción en un objeto que aún no está definido, concretamente (QList Cube :: colorList).

No sé QT y, por lo tanto, no puedo comentar cómo realmente inicializar esta clase.

Cuestiones relacionadas