2013-08-09 19 views
5

Ricevo uno strano comportamento con un C++ 11 std::array. Quando provo a compilare con std::array<std::tuple<int, float>, 6> myTuples; come variabile membro, ottengo questi errori:std :: array errore di tipo incompleto con una matrice di std :: tupla

mingw32\4.7.2\include\c++\array:-1: In instantiation of 'struct std::array<std::tuple<int, float>, 6u>':
mingw32\4.7.2\include\c++\array:77: error: 'std::array<_Tp, _Nm>::_M_instance' has incomplete type

non sono sicuro se qualcuno di questo cambia nulla, ma la classe è in una classe template derivato da un'altra classe template. Il parametro template è un unsigned int a determina la dimensione di un std::array protetto nella classe base, di cui faccio riferimento nella classe derivata using Base<param>::m_array;. La classe derivata ha vari tipi glm::vec3/dmat4/quat e utilizza la funzione fissa OpenGL glBegin(GL_QUADS);. Sto usando SDL-1.2.15 per creare un contesto OpenGL. Penso che la maggior parte di ciò fosse irrilevante, ma forse no. Potrei incollare il codice, ma tutto è interconnesso, quindi può essere compilato solo nel suo complesso (che è distribuito tra le fonti è circa un migliaio di righe).

Tuttavia, quando includo questa stessa riga in this ideone example, in circostanze molto simili, si compila perfettamente bene. Ho controllato che non era solo il mio compilatore (MinGW g ++ versione 4.7.2) compilando lo stesso sul mio compilatore con la riga di comando g++ -Wall -std=c++11

Qualcuno sa perché potrei ottenere questi errori? Ho avuto qualche problema prima con il compilatore che si bloccava durante l'analisi dell'assegnazione std::array (utilizzando array = {{a,b,c}}; per un parametro predefinito), ma questa volta l'errore del compilatore non si arrestava.

+4

Avete fatto '#include '? – dunc123

+3

Posso riprodurre un errore simile se si dimentica di includere ''. In realtà, lo stesso errore esatto con g ++ 4.7 '/usr/include/c++/4.7/array:77:43: errore: 'std :: array <_Tp, _Nm> :: _ M_instance' ha tipo incompleto' –

+0

Posta un [SSCCE] (http://sscce.org/). – juanchopanza

risposta

10

Come richiesto, hai dimenticato di includere <tuple> ed è per questo che il compilatore si è lamentato di un tipo incompleto.

+3

Nel mio caso ho dimenticato di aggiungere '#include ' –

Problemi correlati