2012-03-11 12 views
5

GCC skarży się na ten kod, mimo że kompilowałem z flagą -std=c++11, a moja wersja gcc podobno obsługuje Unrestricted unions (> 4.6).Anonimowy związek/struktura klasy z konstruktorem

union 
{ 
    struct 
    { 
     float4 I,J,K,T; 
    }; 
    struct 
    { 
     float4 m_lines[4]; 
    }; 
    struct 
    { 
     float m16f[16]; 
    }; 
    struct 
    { 
     float m44f[4][4]; 
    }; 
}; 

Należy zauważyć, że float4 ma konstruktor inny niż domyślny, który przyjmuje 0 parametrów.

class float4 
{ 
    public: 
     float4(); 
.... 
}; 

Czy masz pojęcie, co mogę zrobić? Błąd jest:

<anonymous union>::<anonymous struct>::I’ with constructor not allowed in anonymous aggregate 
+0

Usuń konstruktor z klasy 'float4'. –

+1

@KerrekSB: Cóż, nie, nie mogę :) – qdii

+5

C++ nie ma żadnych anonimowych struktur ... jest rozszerzeniem twojego kompilatora –

Odpowiedz

0

Kwestia nie jest tu fakt, że klasa float4 ma konstruktora, co czyni go non-POD pod starą C++ 03 definicji POD. Problem polega raczej na tym, że wasz związek i struktury w waszym związku są anonimowe. Jeśli je po prostu nazwiesz, zadziała:

union u 
{ 
    struct s1 
    { 
     float4 I,J,K,T; 
    }; 
    struct s2 
    { 
     float4 m_lines[4]; 
    }; 
    struct s3 
    { 
     float m16f[16]; 
    }; 
    struct s4 
    { 
     float m44f[4][4]; 
    }; 
}; 
+4

"to zadziała". jaki jest pożądany cel? utworzyłeś pusty związek. wątpię, że było to pożądane. –

+1

Dzięki za rozwiązanie, ale chciałbym zachować moje anonimowe struktury: ten związek jest zagnieżdżony wewnątrz klasy i jeśli zmienię nazwy, będę musiał zmienić nazwę każdego połączenia. Ten kod działa poprawnie na MSVC10, chciałbym móc ulepszyć gcc również do poprawnego traktowania. – qdii

+1

@qdii, problem polega na tym, że anonimowe konstrukcje nie są poprawne w C++, więc będziesz mieć problemy z kompilacją przez cały czas, jeśli spróbujesz napisać kod wieloplatformowy za ich pomocą. Byłoby lepiej, gdybyś nie używał całkowicie anonimowych struktur. –

Powiązane problemy