2016-06-12 8 views
7

In precedenza avevo usato TDM-GCC-5.10 e ora tornavo a 4.9 MINGW-GCC e ottenevo uno strano errore con il tentativo di usare la lista -initialization:non può convertire {...} da <elenco inizializzatore racchiuso> per struct

class Vector2 
{ 
public: 
    Vector2(float x, float y) 
    { 
     this->x = x; 
     this->y = y; 
    } 
    float x = 0.f; 
    float y = 0.f; 
}; 

struct Test 
{ 
    int x = 0; 
    Vector2 v; 
}; 

int main() 
{  
    Test tst = {0,Vector2(0.0f,0.0f)}; //Error 
    return 0; 
} 

Errore:

main.cpp: In function 'int main()': 
main.cpp:21:41: error: could not convert '{0, Vector2(0.0f, 0.0f)}' from '<brace-enclosed initializer list>' to 'Test' 
     Test tst = {0,Vector2(0.0f,0.0f)}; //Error 
             ^

ho usato C++ 14 con entrambi i compilatori. Che c'è?

+0

Non c'è alcun 'principale' nella domanda. Vedi [chiedere] e fornire un [mcve]. – Olaf

+0

@Olaf Modificato, copia e prova ad eseguirlo. –

+0

Ripristinato alla versione precedente. Non si suppone che tu debba modificare una domanda una volta che hai una risposta se quella modifica rimuove il contesto per quella risposta. Potresti aggiungere una spiegazione, anche se è chiaramente indicata come tale. – Olaf

risposta

12

Il problema è qui:

struct Test 
{ 
    int x = 0; // <== 
    Vector2 v; 
}; 

Fino a poco tempo, membro predefinito inizializzatore impedire alla classe di essere un aggregato, quindi non è possibile utilizzare l'inizializzazione di aggregazione su di loro. Gcc 4.9 implementa ancora le vecchie regole qui, mentre gcc 5 usa quelle nuove.

0

Hai perso ; dopo la definizione della classe e dopo int x = 0. Poi hai ricevuto molti errori e apparentemente solo considerato l'ultimo. Ma il compilatore è stato confuso perché Vector2 non è stato definito (a causa della mancanza di ;).

Questo compila:

int main() 
{ 
    class Vector2 
    { 
    public: 
     Vector2(float x, float y) 
     { 
      this->x = x; 
      this->y = y; 
     } 
     float x = 0.f; 
     float y = 0.f; 
    }; 

    struct Test 
    { 
     int x; 
     Vector2 v; 
    }; 

    Test tst = {0,Vector2(4,5)}; 
    return 0; 
} 
+0

Mi dispiace, li ho appena aggiunti, quale compilatore versione e standard usi? E questo non è causato dalla mancanza; (Ho dimenticato solo in questo esempio) tutto ha funzionato bene con il compilatore TDM-GCC. –

+0

g ++ 4.8.4 con l'opzione '-std = C++ 11'. Nota che ho anche rimosso (accidentalmente) '= 0' nella dichiarazione' x' di Test. L'aggiunta sembra portare a un errore del compilatore. – jpo38

+0

sembra bene qui: https://ideone.com/0GwoBo – RyanP

Problemi correlati