Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error elemento administrado

Estas en el tema de Error elemento administrado en el foro de C/C++ en Foros del Web. Hola, Tengo un problema a la hora de definir una clase con un elemento administrado. En mi programa, quiero trabajar con el tipo BitArray, el ...
  #1 (permalink)  
Antiguo 31/07/2015, 05:18
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 8 años, 10 meses
Puntos: 0
Error elemento administrado

Hola,

Tengo un problema a la hora de definir una clase con un elemento administrado.

En mi programa, quiero trabajar con el tipo BitArray, el cual he definido de la siguiente forma:

Código C++:
Ver original
  1. array<Boolean>^ myBools = {false,false,false,true,false,false,true,false};
  2.    BitArray^ myBA4 = gcnew BitArray( myBools );

A partir de aquí, quiero definir una clase de la siguiente forma:

Código C++:
Ver original
  1. class WordItem
  2. {
  3.     BitArray myArray;
  4.     int Position;
  5.     int Length;
  6. };

Y aquí es donde me surge el problema. Me aparece el siguiente error:

Código C++:
Ver original
  1. error C3265: no puede declarar un elemento 'myArray' administrado en un elemento 'WordItem' sin administrar

¿Cómo debería hacer la definición para que no aparezca este error? Nunca he trabajado con tipos administrados por lo que desconozco su funcionamiento.

Gracias!
  #2 (permalink)  
Antiguo 31/07/2015, 05:40
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Error elemento administrado

La duda deberías colocarla en el foro de .NET. Este foro es únicamente para código C/C++ nativo.

Un saludo
  #3 (permalink)  
Antiguo 31/07/2015, 12:02
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Error elemento administrado

Hola eferion,

Tienes toda la razón, lo muevo al foro de .NET. Como te decía, estaba un poco perdido con este tema y no tengo muy claro cómo funciona..

De hecho, quizá haya otra forma para solucionar mi problema, en lugar de utilizar BitArray. Te comento lo que quiero hacer por si podéis ayudarme..

Tengo definido un char de 8 caracteres que se rellena concatenando los valores de otros char de origen, de forma que al final me queda una cadena de 8 caracteres (todos los caracteres en realidad son '0' y '1'. Es decir, mi cadena guardaría (por ejemplo) los siguientes valores: ('0','0','0','1','0','0','1','0'). Por tanto, estoy ocupando 64 bits (8 bits por cada carácter, verdad?).

Lo que necesito es almacenar esos 8 caracteres en un único char, de forma que me ocupen solo 8 bits. ¿Cómo podría hacer esto? Había pensado pasar los 8 caracteres iniciales a su valor entero y después almacenar ese valor entero dentro del char destino, que sería de tamaño 1, (de 8 bits), pero no he conseguido que eso me funcione.

De ahí la idea de intentar hacerlo con BitArray

¿Alguna idea? Todas serán bienvenidas! Gracias!
  #4 (permalink)  
Antiguo 01/08/2015, 07:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Error elemento administrado

Siempre hablando de C/C++, puedes usar los campos de bits.

http://c.conclase.net/curso/index.ph...STR_CamposBits

Creo que eso se ajusta bien a lo que necesitas
__________________
Mi calculadora en Qt
  #5 (permalink)  
Antiguo 03/08/2015, 00:46
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Error elemento administrado

Efeiron,

Muchísimas gracias de nuevo, me ha sido de gran ayuda. Desconocía la existencia de los campos de bits para C/C++ (perdón que no lo especifiqué cuando espuse mi problema).

Pero ahora me encuentro con otro problema. Con los campos de bits puedo almacenar perfectamente los 8 bits que te decía ocupando sólo un único byte y puedo acceder a ellos de forma individual. Pero, ¿cómo podría almacenar esos 8 bits en un único caracter (sin estructura ni campos de bits)?

Es decir, yo tengo un campo de bit declarado de la siguiente forma:

Código C++:
Ver original
  1. typedef struct mapaBits
  2. {
  3.     unsigned char bit0:1;
  4.     unsigned char bit1:1;
  5.     unsigned char bit2:1;
  6.     unsigned char bit3:1;
  7.     unsigned char bit4:1;
  8.     unsigned char bit5:1;
  9.     unsigned char bit6:1;
  10.     unsigned char bit7:1;
  11. };

Y esta estructura la iré rellenando bit a bit en base a otros campos de mi programa. Pero una vez tenga la estructura rellena (los 8 bits completos), necesitaría pasar esos 8 bits a una única variable de tipo char. No sé si me he explicado..

Gracias otra vez!
  #6 (permalink)  
Antiguo 03/08/2015, 03:19
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Error elemento administrado

Hola de nuevo:

Mas quisiera yo ser eferion, pero por desgracia no lo soy

Sobre tu tema, supongo que ser trata de recomponer el byte a partir de los bits.
Un char tiene 1 byte que son 8 bits y que puede almacenar 256 valores diferentes. Tienes que pasar de binario a decimal:

Código C++:
Ver original
  1. bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0
  2. --------------------------------------------------------
  3.  128 |  64  |  32  | 16   |  8   |  4   | 2    | 1

Así que un valor de la estructura así : 1 0 0 1 0 0 1 1
sería:
1x128 + 0x64 + 0x32 + 1x16 + 0x8 + 0x4 + 1x2 + 1x1 = 147

que sería el valor a asignar a la variable char.

Un último apunte, si quieres esos char para representar caracteres, recuerda que la tabla ASCII sólo llega a 128 caracteres (usa 7 bits para representar y 1 lo usa de control). Esto último no sé si lo estoy diciendo bien técnicamente
__________________
Mi calculadora en Qt
  #7 (permalink)  
Antiguo 03/08/2015, 03:26
 
Fecha de Ingreso: mayo-2015
Mensajes: 15
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Error elemento administrado

Hola dehm,

Muchas gracias por contestar!! Me dirigí a eferion porque me había contestado al mensaje inicial, pero por supuesto que todos los aportes son más que bienvenidos!

En cuanto a tu respuesta.. Lo que no sé cómo hacer es asignar ese valor entero (147 en el ejemplo) a una variable char de un caracter (es decir, solo 8 bits). He probado con itoa pero no me funciona.. Me ocupa más de un caracter..
  #8 (permalink)  
Antiguo 03/08/2015, 03:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Error elemento administrado

No sé si estoy entendiendo la duda:

En principio es hacer:
Código C++:
Ver original
  1. char c=147;

¿Cual es el problema que te da?
__________________
Mi calculadora en Qt
  #9 (permalink)  
Antiguo 03/08/2015, 03:33
 
Fecha de Ingreso: septiembre-2010
Mensajes: 494
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: Error elemento administrado

Mira a ver si esto te saca de dudas:

Código C++:
Ver original
  1. char a=80;
  2. cout<<(int)a;
  3. cout<<a;
__________________
Mi calculadora en Qt

Etiquetas: elemento, funcion, int, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:03.