[C con Clase] Problema 2 estructuras

Steven Davidson steven en conclase.net
Sab Feb 17 23:34:55 CET 2007


Hola Alejandro,

El pasado 2007-02-17 21:53:04, Alejandro escribió:

A> Hola, tengo una duda que querría que me solucionarais.
A> Si en una estructura como esta:
A> struct Bits
A> {
A>        unsigned short bit1:5;//Variable unsigned short de 5 bits
A>        unsigned short bit2:4;//Variable unsigned short de 4 bits
A>        unsigned short bit3:7;//Variable unsigned short de 7 bits
A> }Param[10];
A> Luego uso este bucle:
A>  
A>  for(k = 0; k < 10; k++)
A>     {
A>           cin >> Param[k].bit1;
A>           cin >> Param[k].bit2;
A>           cin >> Param[k].bit3;
A>      }
A>  
A> A continuación el compilador me da un error para cada una de las lineas donde escribo los "cin >> ". Pone algo así:
A> "In function 'int main()':
A> cannot bind bitfield 'Param[k].Bits::bit1' to 'short unsigned int&'
A> cannot bind bitfield 'Param[k].Bits::bit2' to 'short unsigned int&'
A> cannot bind bitfield 'Param[k].Bits::bit3' to 'short unsigned int&'
A> ¿Qué está pasando y cómo lo puedo solucionar?

El problema está en que 'cin >>' requiere una dirección de memoria para guardar los valores. Como no se puede determinar la dirección de memoria de los campos de bits, porque no tienen, ocurre un error.

La solución es crear una variable auxiliar. Por ejemplo,

unsigned short int nAux;

cin >> nAux;  Param[k].bit1 = nAux;
cin >> nAux;  Param[k].bit2 = nAux;
cin >> nAux;  Param[k].bit3 = nAux;

A> Porque supongo que en el 2º problema de estructuras es esto a lo que os referís.
A>  

Sí; así es. Sin embargo, deberías usar los nombres indicados en el enunciado del ejercicio: 'dia', 'mes', y 'anno'.


Espero haber aclarado la duda.

Steven


Más información sobre la lista de distribución Cconclase