Pola bitowe w strukturze

0

Witam. Mam napisać dowolny program z wykorzystaniem pól bitowych.
Napisałem coś takiego:

#include <iostream>
using namespace std;
struct osoba 
{
       int plec:1;
       int wiek:7;
       int potomstwo:4;
       };
int main()
{
    osoba osoba[3];
    for (int b=0; b<=2; b++)
    {
        cout<<"ID: "<<b+1<<endl;
        cout<<"Plec (0 - Mezczyzna, 1 - Kobieta): ";
        cin>>osoba[b].plec;
        cout<<"Wiek: ";
        cin>>osoba[b].wiek;
        cout<<"Ilosc dzieci: ";
        cin>>osoba[b].potomstwo;
    }
    for (int b=0; b<=2; b++)
    {
        if (osoba[b].plec==0) cout<<"Mezczyzna "; else cout<<"Kobieta ";
        cout<<osoba[b].wiek<<" lat, "<<"dzieci: "<<osoba[b].potomstwo<<endl;
    }
system("pause");
return 0;
} 

i podczas kompilacji wychodzą następujące błędy:
16 M:\MP\KLASA 3\bit.cpp cannot bind bitfield osoba[b].osoba::plec' to int&'
18 M:\MP\KLASA 3\bit.cpp cannot bind bitfield osoba[b].osoba::wiek' to int&'
20 M:\MP\KLASA 3\bit.cpp cannot bind bitfield osoba[b].osoba::potomstwo' to int&'

Nie wiem w czym tkwi błąd. W moim odczuciu kod jest dobrze napisany, a jednak nie jest, bo się nie kompiluje. Jak usunę pola bitowe to program działa, ale z nimi nie chce ;/
Proszę o korekcję...

0

Obiekt typu cin pobiera adres obiektu. Pola bitowe z kolei nie mają obiektu, gdyż nie zajmują nawet pełnego bajta, nie jesteś w stanie uzyskać dostępu do połowy bajta np. Możesz dokonać przypisania, ale za pomocą operator=

0

Czyli nie ma możliwości wczytania wartości zmiennej, gdy ma być przechowana na 1-8 bitów?

0

Na 8 bitach jest. To jest typ char. Ale jeśli zadeklarujesz char bit : 8, to już nie. Musisz wtedy obejść całość poprzez pobranie ze zmiennej tymczasowej inta i przypisanie tego inta do pola bitowego, czyli:

#include <iostream>
using namespace std;
struct osoba 
{
       int plec : 1;
       int wiek : 7;
       int potomstwo : 4;
       };
int main()
{
    osoba osoba[3];
    for (int b=0; b<=2; b++)
    {
		int temp;
        cout<<"ID: "<<b+1<<endl;
        cout<<"Plec (0 - Mezczyzna, 1 - Kobieta): ";
        cin >> temp;
		if(temp >= 0 && temp <= 1)
			osoba[b].plec = temp;
        cout<<"Wiek: ";
		cin >> temp;
        osoba[b].wiek = temp;
        cout<<"Ilosc dzieci: ";
		cin >> temp;
        osoba[b].potomstwo = temp;
    }
    for (int b=0; b<=2; b++)
    {
        if (osoba[b].plec==0) cout<<"Mezczyzna "; else cout<<"Kobieta ";
        cout<<osoba[b].wiek<<" lat, "<<"dzieci: "<<osoba[b].potomstwo<<endl;
    }
system("pause");
return 0;
} 
0

Teraz działa jak należy ;] Dzięki wielkie za pomoc. Pozdrawiam.

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