Duda con estructuras (struct)

Iniciado por alexis33de, 28 Agosto 2010, 02:59 AM

0 Miembros y 1 Visitante están viendo este tema.

alexis33de

Hola estaba leyendo un libro de estructuras , ya q no me enseñaron eso  :-( y lo estaba viendo por mi propia cuenta  ;) y  este tiene un ejemplo de struct , en el que dice q la asignacion x=y es correcta y x=z es incorrecta (del ejercicio q coloco en la parte inferior), mi duda es de q manera se puede arreglar el codigo para x = z funcione. ::) Pues la primera solucion q le pondria seria ponerle un nombre a las struct  :rolleyes:, ahora no se si esa sea la correcta o exista otras formas para solucionarlo. Pongo este tema ya q talvez para mi sea una forma y en realidad sea otra, si alguno de ustedes me lo explicara se lo agradeceria XD SALUDOS
Ejercicio:
Código (cpp) [Seleccionar]
struct
  {
   int i;
   double j;
  } x,y;
 
struct
  {
  int i;
  double j;
  }z;

Littlehorse

Los miembros no importan, pueden ser los mismos y la misma cantidad, pero si son distintas estructuras, estos pueden estar alineados de distinta forma, por lo tanto la asignación entre distintos tipos de estructura esta prohibida.

En cuanto a lo de los nombres, por mas que tuviesen el mismo nombre, son distintos tipos, para el compilador van a ser dos cosas completamente distintas.

Esto podría funcionar:

memcpy(&z,&x,sizeof(x));


pero eso no quiere decir que sea correcto, invocaría comportamiento indefinido cuando menos te lo esperes debido a la posible diferencia en la alineación de los elementos de ambas estructuras. Lo que hay que tener claro es que son dos tipos distintos.
Si tenes dos estructuras completamente distintas, pero estas contienen los mismos elementos, entonces lo ideal es que utilices una misma estructura y declarar ambas bajo la misma entidad.

Por otro lado, si estas en C++, podes sobrecargar operadores u definir constructores adecuados. Igualmente dependerá del caso, en lo que respecta al ejemplo solo seria trabajo innecesario.

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.