• Jueves 25 de Abril de 2024, 14:06

Autor Tema:  Vector De Structura  (Leído 1956 veces)

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Vector De Structura
« en: Viernes 25 de Abril de 2008, 12:55 »
0
Hola, buenos dias.

Estoy programando en Visual Studio 2005 con C# y tengo problemas para acceder a un vector de estructuras. Pongo un ejemplo de mi estructura y del vector creado a partir de ella:

unsafe struct AP
    {      
        public string posicion;
        public fixed int valores[10];
        public int tamvalor;
        public float media, varianza, desviacion;
    }

AP[] VectorAP = new AP[10];

Ya he creado un vector de tamaño 10 y cada entrada del vector es una estructura AP. Mi problema es como aceder al campo valores que tambien es un vector.

Lo normal para acceder a este tipo de configuracion es por ejemplo:
VectorAP[1].tamvalor = 1;          <------ Esto funciona
VectorAP[1].valores[3] = 1;        <------ Esto NO FUNCIONA !!!

Al intentar acceder al campo vectores me sale este error:
"Error del compilador CS1666. No puede utilizar los búferes de tamaño fijo contenidos en expresiones de tipo unfixed. Intente usar la instrucción fixed."


Alquien me puede ayudar??

Gracias.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Vector De Structura
« Respuesta #1 en: Viernes 25 de Abril de 2008, 18:24 »
0
Mira waty00, en tu caso, cuando necesito tener un vector en una estructura, prefiero definirla como una clase, al fin y al cabo, un struct y un class, funcionan muy parecido, y me evito ese y otros errores al utilizar structs (he tenido otras dificultades con struct), solo que, para evitar que pueda "heredar" de la clase, la defino como sealed:

Código: Text
  1.  
  2.     sealed class AP
  3.     {
  4.         public string posicion;
  5.         public int[] valores = new int[10];
  6.         public int tamvalor;
  7.         public float media, varianza, desviacion;
  8.     }
  9.  
  10.  

De esa manera, el codigo que pones, si seria valido.
Código: Text
  1.  
  2.             AP[] VectorAP = new AP[10];
  3.             VectorAP[1].tamvalor = 1;
  4.             VectorAP[1].valores[3] = 1;
  5.  
  6.  

Ojala y eso resuelva tu problema.

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Vector De Structura
« Respuesta #2 en: Lunes 28 de Abril de 2008, 22:12 »
0
He probado lo que me dijiste pero no funciona. Me sale este error:

"Excepción no controlada del tipo 'System.NullReferenceException' en PFC.exe
Información adicional: Referencia a objeto no establecida como instancia de un objeto."

Con la clase se me crea el vector de [10] pero no se crean los campos de la estructura de cada posicion del vector. Al intentar acceder a un campo que no existe da el error en tiempo de ejecucion pero en la compilacion no lo detecta.

-      VectorAP   {Dimensiones:[10]}   PFC.Form1.AP[]
      
  •    null   PFC.Form1.AP
  • [1]   null   PFC.Form1.AP
          [2]   null   PFC.Form1.AP
          [3]   null   PFC.Form1.AP
          [4]   null   PFC.Form1.AP
          [5]   null   PFC.Form1.AP
          [6]   null   PFC.Form1.AP
          [7]   null   PFC.Form1.AP
          [8]   null   PFC.Form1.AP
          [9]   null   PFC.Form1.AP

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Vector De Structura
« Respuesta #3 en: Martes 29 de Abril de 2008, 18:55 »
0
Es muy raro, porque a mi si me funciona.

Quizas estas declarando mal algo, postea tu codigo, para saber que pasa.

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

Mostreus

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Vector De Structura
« Respuesta #4 en: Miércoles 30 de Abril de 2008, 22:28 »
0
adf

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Vector De Structura
« Respuesta #5 en: Martes 6 de Mayo de 2008, 15:28 »
0
Este es mi código:

namespace PFC
{
   
   unsafe public partial class Form1 : Form
   {
      private void button1_Click(object sender, EventArgs e)
      {
          FicheroUnico(ap);
      }
      
      sealed class APP
                          {
         public string posicion;
         public int[] valores = new int[10];
         public int tamvalor;
         public float media, varianza, desviacion;
      }


      unsafe public void FicheroUnico(string ap)
      {
         APP[] VectorAPP = new APP[10];
         VectorAPP[1].desviacion = 3;
      }
   }
}

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Vector De Structura
« Respuesta #6 en: Martes 6 de Mayo de 2008, 15:32 »
0
Correccion, el codigo anterior si funciona. Me falto poner la linea conflictiva. Quiero aclarar que esto compila bien pero en tiempo de ejecucion cuando le doy al boton del form salta el error que ya comentaba. Aqui dejo el codigo con la nueva linea:
namespace PFC
{
   
   unsafe public partial class Form1 : Form
   {
      private void button1_Click(object sender, EventArgs e)
      {
          FicheroUnico(ap);
      }
      
      sealed class APP
           {
         public string posicion;
         public int[] valores = new int[10];
         public int tamvalor;
         public float media, varianza, desviacion;
      }


      unsafe public void FicheroUnico(string ap)
      {
         APP[] VectorAPP = new APP[10];
         VectorAPP[1].desviacion = 3;
         VectorAPP[1].valores[1] = 4;    ----->linea conflictiva
      }
   }
}

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Vector De Structura
« Respuesta #7 en: Martes 6 de Mayo de 2008, 15:36 »
0
correccion, ninguna linea funciona. todo compila pero me da error al ejecutar.
creia que me funcionaba, pero me da el mismo error en las dos lineas.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Vector De Structura
« Respuesta #8 en: Martes 6 de Mayo de 2008, 20:53 »
0
Tienes razon, como te lo puse originalmente no funciona, estuve investigando y resulta que cuando haces APP[] VectorAPP = new APP[10] no crea un array de diez objetos, sino un array con REFERENCIAS a diez objetos, pero los objetos aun no existen y por lo tanto, los marca como null.

La solucion es crear el objeto despues de crear el array, esto lo puedes hacer individualmente o mediante un ciclo, como lo prefieras. a continuacion te pongo la manera correcta, por cierto, recuerda que los array comienzan con cero y no con uno, un array de 10 elementos, va del 0 al 9 y no del 1 al 10.

Código: Text
  1.  
  2.         public void FicheroUnico()
  3.         {
  4.             /// Crea un vector con referencias a 10 objetos
  5.             /// las referencias valen null hasta que no se crea
  6.             /// el objeto.
  7.             APP[] VectorAPP = new APP[10];
  8.            
  9.             /// Creacion del objeto
  10.             VectorAPP[0] = new APP();
  11.             VectorAPP[0].desviacion = 3;
  12.             VectorAPP[0].valores[0] = 4;
  13.         }
  14.  
  15.  
  16.  
  17.  


Código: Text
  1.  
  2.             /// Creacion de los 10 objetos mediante un ciclo
  3.             int i;
  4.             for (i = 0; i &#60; 10; i++)
  5.             {
  6.                 VectorAPP[i] = new APP();
  7.             }
  8.  
  9.  

Saludos :hola:

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

waty00

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Vector De Structura
« Respuesta #9 en: Miércoles 7 de Mayo de 2008, 00:19 »
0
Ahora si me funciona bien. Es lo que quería aunque tenga mas lineas de código.

Muchicimas Gracias.