2016-06-12 34 views
7

yapısına dönüştüremedi. Daha önce TDM-GCC-5.10 kullanmıştım ve şimdi 4.9 MINGW-GCC'ye geri döndü ve listeyi kullanmaya çalışırken garip bir hata alıyorum -initialization:, {...} <brace-kapalı başlatıcı listesinden>

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

hatası:

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 
             ^

her iki derleyicileriyle C++ 14 kullanılır. Yanlış olan ne?

+0

Soruda "ana" yoktur. [Sor] bölümüne bakın ve bir [mcve] sağlayın. – Olaf

+0

@Olaf Düzenlendi, kopyala ve çalıştırmayı dene. –

+0

Önceki sürüme geri döndü. Bir soruya cevap verdikten sonra, söz konusu düzenlemenin söz konusu yanıt için bağlamı kaldırması durumunda bir soruyu düzenlememeniz gerekir. Açıkça belirtilmiş olsa da, bir açıklama ekleyebilirsiniz. – Olaf

cevap

12

sorun buradadır:

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

Yakın zamana kadar, varsayılan üye başlatıcısı agrega olmaktan sınıfını önlemek, bu nedenle bunları toplu başlatma kullanamazsınız. Gcc 4.9 hala eski kuralları uygularken, gcc 5 yenilerini kullanıyor.

0

Sınıf tanımınızdan sonra ve int x = 0 sonra, ; kaçırdınız. Sonra birçok hata yaptınız ve görünüşe göre sadece sonuncusunu düşündünüz. Ama derleyiciniz karıştı çünkü Vector2 tanımlanmadı (; eksik nedeniyle).

Bu derler:

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

Üzgünüz onları ekledim, hangi derleyici Sürüm ve standart kullanıyorsunuz? Ve bu eksiklerden kaynaklanmaz; (Sadece bu örnekte unuttum) her şey TDM-GCC Derleyici ile iyi çalıştı. –

+0

g ++ 4.8.4 seçeneği ile -std = C++ 11'. Ayrıca testin 'x' beyanı için (yanlışlıkla)' = 0’ı kaldırdığımı unutmayın. Eklenmesi, bir derleyici hatasına yol açar. – jpo38

+0

burada iyi görünüyor: https://ideone.com/0GwoBo – RyanP

İlgili konular