Цель C LValue требуется как унарный операнд '&' - PullRequest
1 голос
/ 09 января 2011

В моем коде я получаю эту ошибку, когда пытаюсь получить указатель на мое свойство класса.
(я написал небольшой переводчик * .OBJ в Python, отбрасывая нормали)
КОД:


//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];

1 Ответ

4 голосов
/ 09 января 2011

Доступны ли сообщения x, y, z? Полагаю, что так. Затем они возвращают копию значений (поскольку Objective-C не имеет понятия ссылок), и вы переходите к указателям на функцию sscanf для временных переменных и, таким образом, к ошибке.

Вы должны использовать локальные переменные, чтобы получить значения из функции sscanf. Примерно так:

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];
...