Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Strukture u unijama

[es] :: C/C++ programiranje :: Strukture u unijama

[ Pregleda: 1695 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2790 Profil

icon Strukture u unijama06.08.2010. u 13:17 - pre 166 meseci
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.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

Burgos
Nemanja Borić
Amazon Web Services
Berlin

Član broj: 12484
Poruke: 1947
212.200.65.*

Sajt: stackoverflow.com/users/1..


+480 Profil

icon Re: Strukture u unijama06.08.2010. u 15:25 - pre 166 meseci
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.
 
Odgovor na temu

Goran Arandjelovic
Beograd

Član broj: 29116
Poruke: 387
*.mbb.telenor.rs.



+9 Profil

icon Re: Strukture u unijama06.08.2010. u 16:23 - pre 166 meseci
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);
}

 
Odgovor na temu

Nedeljko
Nedeljko Stefanović

Član broj: 314
Poruke: 8632
*.dynamic.sbb.rs.



+2790 Profil

icon Re: Strukture u unijama06.08.2010. u 16:45 - pre 166 meseci
Hvala obojici. To sam tražio.
Nije bitno koji su zaključci izvučeni, već kako se do njih došlo.
 
Odgovor na temu

[es] :: C/C++ programiranje :: Strukture u unijama

[ Pregleda: 1695 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.