[C++]Klasa z konstruktorem, w unii

Odpowiedz Nowy wątek
2006-09-23 22:32
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 :)


Sun Certificated Java Programmer 6

Pozostało 580 znaków

2006-09-24 09:22
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


Pozostało 580 znaków

2006-09-24 09:33
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.


Northern wind take my song up high
To the Hall of glory in the sky
So its gates shall greet me open wide
When my time has come to die

Pozostało 580 znaków

2006-09-24 10:14
0
class CInPut
{
        public:
                CInPut();
                CVector Vector;
                inline float & Float() { return Vector.x; };
};

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

Pozostało 580 znaków

2006-09-25 20:36
0

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


Sun Certificated Java Programmer 6

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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