[C++]Klasa z konstruktorem, w unii

Odpowiedz Nowy wątek
2006-09-23 22:32

Rejestracja: 15 lat temu

Ostatnio: 2 lata temu

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

Rejestracja: 13 lat temu

Ostatnio: 6 lat temu

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

Rejestracja: 15 lat temu

Ostatnio: 13 lat temu

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

Rejestracja: 16 lat temu

Ostatnio: 7 lat temu

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

Rejestracja: 15 lat temu

Ostatnio: 2 lata temu

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

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