[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