【问题标题】:Objective C LValue required as unary '&' operand需要作为一元“&”操作数的目标 C LValue
【发布时间】:2011-01-08 23:31:32
【问题描述】:

在我的代码中,当我尝试获取指向我的类属性的指针时出现此错误。
(我用 Python 写了一个小的 *.OBJ 文件翻译器,丢弃了法线)
代码:


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

【问题讨论】:

    标签: objective-c pointers stdio scanf


    【解决方案1】:

    xyz 是消息访问者吗?大概吧。然后它们返回值的副本(因为 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];
    

    【讨论】:

    • 好的...但是有很多变量...编辑:然后我将使用数组
    • 另一种选择是公开这些属性的支持 ivars。然后,您可以使用 -> 来获取它们并正常获取它们的地址。这还有其他可能会出现的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多