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

Unia , nie mogę użyć struktury w unii
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
#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 ?

kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0

Unia to jest typ, a nie zmienna!

  • Rejestracja: dni
  • Ostatnio: dni
0

Nie bardzo wiem co zrobiłem źle.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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.

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
 #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.

Endrju
  • Rejestracja: dni
  • Ostatnio: dni
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ć.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Spoko, ale gdzie utworzyłeś OBIEKT UNII?

  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
#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;
}
 
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

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

prog.cc:13:1: 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

EvilOne
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 78
0

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

Kopiuj
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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.