[C++]Klasa z konstruktorem, w unii

0

Witajcie,
To chyba mój pierwszy post w tym forum, ucze sie powoli c++ i mam problem :)
Przedstawia się on następująco:

Mam klase wektora w przestrzeni:

class CVector
{
    public:
        union
        {
            struct{ float x, y, z;};
            float v[3];
        };
        CVector() {};
        CVector(float x_, float y_, float z_) : x(x_), y(y_), z(z_) {};
}

(wiekszosc wyciete bo nieważne aktualnie :) )

Teraz chcę dać owy wektor do unii:

class CInPut
{
    public:
        CInPut();
        union 
        {
            struct{ float Float;        };
            struct{ CVector Vector;     };  (*)
        } var;
}

Lecz niestety kompilator daje błąd w linii (*) postaci:

Menu.h:64: error: member CVector CInPut::<anonymous union>::<anonymous struct>::Vector' with constructor not allowed in anonymous aggregate
Menu.h:64: error: member `CVector CInPut::<anonymous union>::<anonymous struct>::Vector' with constructor not allowed in union

Googlałem ale niewiele znalazłem, jedynie to, że a takiej postaci nie CVector nie moze miec konstruktora,
Chciałbym się dowiedzieć, czy rzeczywiście musze usunąć konstruktory z CVector czy może da się to inaczej zrobic?

Pozdrawiam :)

0

Unia nie może zawierać obiektu ,który ma konstruktor lub destruktor.Tym niemniej unia może mieć konstruktor i destruktor.

Wiesław Porębski "Programowanie w języku C++"

Osobiście uważam że przedstawione konstrukcje z uniami utrudniają tylko życie
i są mało przydatne.... ;-)

---------------My page-------------------
http://www.win32prog.republika.pl

0

Zamiast klasy daj wskaźnik do klasy. Nie jest to zbyt wygodne więc zastanów się czy warto oszczędzac parę b pamięci.

0
class CInPut
{
        public:
                CInPut();
                CVector Vector;
                inline float & Float() { return Vector.x; };
};

//np.
CInPut ip;
ip.Float() += 5;
0

Ok, dziękuję wszystkim za zainteresowanie. Skoro nie można to trzeba sobie inaczej radzić :)
Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0