Unia , nie mogę użyć struktury w unii

0
#include <iostream>
using namespace std;

struct slowo_vxi
{

    unsigned int dana : 16;
    unsigned int urzadzenie : 6;
    unsigned int czujnik : 6;
    unsigned int : 2;
};

union
{
    unsigned long cale;
    slowo_vxi vxi;
};


int main()
{
    int d = vxi.dana;
    int u = vxi.urzadzenie;
    int c = vxi.czujnik;
}

Dlaczego pokazuję błąd, że vxi nie została zadeklarowana w tym obszarze ?

0

Unia to jest typ, a nie zmienna!

0

Nie bardzo wiem co zrobiłem źle.

0

Dlaczego pokazuję błąd, że vxi nie została zadeklarowana w tym obszarze ?

A została? Gdzie?

xvi masz tylko wewnątrz unii, która na dodatek nie ma nazwy.

0
 #include <iostream>
using namespace std;

struct slowo_vxi
{

    unsigned int dana : 16;
    unsigned int urzadzenie : 6;
    unsigned int czujnik : 6;
    unsigned int : 2;
};

union
{
    unsigned long cale;
    slowo_vxi vxi;
};


int main()
{
    cin >> vxi.urzadzenie;
    cin >> vxi.dana;
    cin >> vxi.czujnikk;
    int d = vxi.dana;
    int u = vxi.urzadzenie;
    int c = vxi.czujnik;
}

W unii został utworzony obiekt struktury.

3

Nie opowiadajcie bzdur o jakimś niezadeklarowanym/niezdefinowanym obiekcie, to jest anonimowa unia.

Jest prawie dobrze, tylko anonimowa unia w zakresie przestrzeni nazw musi być statyczna (9.5.6).

Dopisz static przed union.

Btw, dokładnie to jest napisane w błędzie kompilacji: error: namespace-scope anonymous aggregates must be static, wystarczy czytać.

0

Spoko, ale gdzie utworzyłeś OBIEKT UNII?

0

unia jest anonimowa, do pól unii odnosimy się tak jak do zmiennych lokalnych.

0

Utworzyłem unie z nazwą, ale teraz i tak pokazuje błąd przy próbie wpisania czegoś do pól struktury

#include <iostream>
using namespace std;

struct slowo_vxi
{

    unsigned int dana : 16;
    unsigned int urzadzenie : 6;
    unsigned int czujnik : 6;
    unsigned int : 2;
};

union skarb
{
    unsigned long cale;
    slowo_vxi vxi ;
};


int main()
{
    skarb skarb;
    cin >> skarb.vxi.urzadzenie;
    cin >> skarb.vxi.dana;
    cin >> skarb.vxi.czujnikk;
    int d = vxi.dana;
    int u = vxi.urzadzenie;
    int c = vxi.czujnik;
}
 
0

Bo nie mozesz tak na jana czytać do pola bitowego. Wczytaj wartość do zwykłej zmiennej a potem przypisz.

0

http://melpon.org/wandbox/permlink/8f94PfbneizanabM

prog.cc1: error: anonymous unions at namespace or global scope must be declared 'static'

wystarczy przeczytać komunikat błędu i wszystko jest zrozumiałe i łatwe do nbaprawienia:
http://melpon.org/wandbox/permlink/3xFKOYDElclYDHu5

0

lub po prostu przenieś unię anonimową do funkcji main (z pewnością to chciałeś osiągnąć):

struct slowo_vxi
{
	unsigned int dana : 16;
	unsigned int urzadzenie : 6;
	unsigned int czujnik : 6;
	unsigned int : 2;
};

int main()
{
	union
	{
		unsigned long cale;
		slowo_vxi vxi;
	};

	cin >> cale;

	int d = vxi.dana;
	int u = vxi.urzadzenie;
	int c = vxi.czujnik;
}

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