[ Nedeljko @ 06.08.2010. 13:17 ] @
Već dosta godina koristim C++ i znam da je sledeća konstrukcija

Code:
 struct A {
    ...
};

union B {
    struct A a;
    ....
};


moguća u C-u, ali ne i u jeziku C++ zato što strukture mogu imati konstruktore i destruktor, pa se ne zna pri npr konstrukciji, konstruktor od kog atributa unije pozvati.

Ako je već tako, postoji li neka zamena za takvu situaciju, a da atributi unije ne budu pokazivači na strukture? Ja ne znam neko elegantno rešenje.
[ Burgos @ 06.08.2010. 15:25 ] @
Ovo radi (g++ 4.3.3, vc++ 2008):


Code:

#include <iostream>
using namespace std;

struct A{
    int i;
};

union B{
    A a;
    float f;

};

int main(int argc, char* argv[])
{
    B b;
    b.a.i = 4;
    cout << b.a.i << endl;

    return 0;
}


Naravno, ne smeš definisati nikakav konstruktor ili destruktor unutar strukture.
[ Goran Arandjelovic @ 06.08.2010. 16:23 ] @
Da dodam samo: pošto je u C++-u dozvoljeno da unija ima konstruktor, samo izbaci konstruktore iz struktura i dodaj bilo kakvu init metodu...

Code:

#include <iostream>
using namespace std;

struct A
{
    void Init()
    {
        _a = 1.0;
    }

    float _a;
};

struct B
{
    void Init()
    {
        _b = 1.0;
    }

    float _b;
};

union X
{
    X()
    {
        a.Init();
        b.Init();
    }

    A a;
    B b;
    float c;
};

int main()
{
    X n;

    n.a._a = 2.0;
    n.b._b = 2.0;
    n.c = 3.0;

    cout << n.a._a << endl;

    return(0);
}

[ Nedeljko @ 06.08.2010. 16:45 ] @
Hvala obojici. To sam tražio.