Objective C LValue requerido como operando unario '&'

En mi código, obtengo este error cuando tratan para obtener un puntero a la propiedad de mi clase.
(Escribí un pequeño traductor de archivos * .OBJ en Python, descartando los normales)
CÓDIGO:


//line: line of text
const char *str = [line UTF8String];  
Point3D *p1, *p2, *p3;
p1 = [Point3D makeX:0 Y:0 Z:0];
p2 = [Point3D makeX:0 Y:0 Z:0];
p3 = [Point3D makeX:0 Y:0 Z:0];
sscanf(str, "t %f,%f,%f %f,%f,%f %f,%f,%f",(&[p1 x]),&([p1 y]),&([p1 z]),&([p2 x]),&([p2 y]),&([p2 z]),&([p3 x]),&([p3 y]),&([p3 z]));
Triangle3D *tri = [Triangle3D make:p1 p2:p2 p3:p3];

preguntado el 08 de enero de 11 a las 23:01

1 Respuestas

Son los x, y, z accesores de mensajes? Supongo que sí. Luego están devolviendo una copia de los valores (ya que Objective-C no tiene la noción de referencias), y está pasando a la sscanf punteros de función a temporales, y por lo tanto el error.

Debe usar variables locales para obtener los valores de la sscanf función. Algo como eso:

const char *str = [line UTF8String];
float p1x, p1y, p1z, p2x, p2y, p2z, p3x, p3y, p3x;
sscanf(str, "t %f,%f,%f %f,%f,%f %f,%f,%f",
       &p1x, &p1y, &p1z, &p2x, &p2y, &p2z, &p3x, &p3y, &p3x);
Point3D *p1, *p2, *p3;
p1 = [Point3D makeX:p1x Y:p1y Z:p1z];
p2 = [Point3D makeX:p2x Y:p2y Z:p2z];
p3 = [Point3D makeX:p3x Y:p3y Z:p3z];
Triangle3D *tri = [Triangle3D make:p1 p2:p2 p3:p3];

Respondido el 09 de enero de 11 a las 02:01

Ok ... Pero eso es un montón de variables ... EDITAR: Voy a usar una matriz entonces - Chelín

La otra opción es hacer públicos los ivars de respaldo de esas propiedades. Luego puede usar -> para llegar a ellos y tomar la dirección de ellos normalmente. Sin embargo, esto tiene otros problemas que pueden surgir: Joshua Weinberg

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.