2016-06-12 5 views
7

nicht konvertieren Ich hatte zuvor TDM-GCC-5.10 verwendet und jetzt zurück zu 4.9 MINGW-GCC und einen seltsamen Fehler beim Versuch, Liste zu verwenden -initialization:konnte {...} von <geschweifter Initialisierungsliste> in Struktur

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; 
} 

Fehler:

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 
             ^

habe ich C++ 14 mit beiden Compiler. Was ist falsch?

+0

Es gibt kein 'main' in der Frage. Sehen Sie [ask] und stellen Sie [mcve] bereit. – Olaf

+0

@Olaf Bearbeitet, einfach kopieren und versuchen, es auszuführen. –

+0

Gerollt zurück zur vorherigen Version. Sie sollten eine Frage nicht bearbeiten, nachdem Sie eine Antwort erhalten haben, wenn diese Änderung den Kontext für diese Antwort entfernt. Sie können eine Erklärung anhängen, wenn diese eindeutig als solche gekennzeichnet ist. – Olaf

Antwort

12

Das Problem dabei ist:

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

Bis vor kurzem Standard Elementinitialisierung verhindern, dass die Klasse entfernt, ein Aggregat, so kann man nicht Aggregat Initialisierung auf sie verwendet. Gcc 4.9 implementiert immer noch die alten Regeln, während gcc 5 die neuen verwendet.

0

Sie haben ; nach Ihrer Klassendefinition und nach int x = 0 verpasst. Dann hast du viele Fehler und scheinst nur die letzte zu betrachten. Aber Ihr Compiler war verwirrt, weil Vector2 nicht definiert wurde (wegen fehlender ;).

Dies kompiliert:

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

Sorry nur hinzugefügt, welche Compiler-Version und Standard verwenden Sie? Und das wird nicht durch das Vermisste verursacht; (Ich habe nur in diesem Beispiel vergessen) alles funktionierte gut mit dem TDM-GCC Compiler. –

+0

g ++ 4.8.4 mit der Option '-std = C++ 11'. Beachten Sie, dass ich (versehentlich) auch "= 0" zur "x" -Deklaration von Test entfernte. Das Hinzufügen führt anscheinend zu einem Compilerfehler. – jpo38

+0

scheint hier in Ordnung: https://ideone.com/0GwoBo – RyanP