代码之家  ›  专栏  ›  技术社区  ›  GONeale

无法在参数传递中将“b2polygonshape”转换为“objc_object*”

  •  0
  • GONeale  · 技术社区  · 15 年前

    我不确定你们是否熟悉box2d物理引擎,但我正在cocos2d和objective c中使用它。

    这或多或少可能是一个一般的客观C问题,不过,我正在执行以下操作:

    NSMutableArray *allShapes = [[NSMutableArray array] retain]; 
    b2PolygonShape shape;
    ..
    ..
    [allShapes addObject:shape];
    

    并在生成时在addobject定义上接收此错误:

    cannot convert 'b2PolygonShape' to 'objc_object*' in argument passing
    

    所以或多或少我想知道如何将b2polygonshape添加到可变数组中。b2polygonshape看起来只是一个类,而不是一个结构或类似的东西。我在google上能找到的最接近的东西是“将b2polygonshape封装为nsobject,然后将其添加到数组中”,但是我不确定最好的方法,但是我认为这个对象应该使用 addObject ,因为我的其他一些实例化类对象可以添加到数组中。

    这都是因为b2polygonshape没有继承 NSObject 在它的根上?

    谢谢

    2 回复  |  直到 15 年前
        1
  •  4
  •   Peter Hosey    15 年前

    b2PolygonShape 是C++类,而不是Objc类。您只能将objc实例放入“ns containers”。

    既然你需要C++,最好使用 std::vector<b2PolygonShape> .

        2
  •  1
  •   nash George D Girton    15 年前

    ns容器类只能(正如kennytm指出的那样)存储nsobjects。有时候会有点痛。但是有很多替代ns容器的方法。

    您可以编写objective-c包装类(或使用nsvalue),并将其存储在nsarray中。

    您可以使用一个普通的旧c数组(但是,如果数组大小未定义并缩小和增大,则可能无法满足您的需要)

    可以使用哈希表存储引用。

    结构的链接列表也很方便,而且很容易创建和维护。

    如果你决定坚持STD::向量,它是一个好的解决方案,你可以在以下方面更多地了解: http://www.cplusplus.com/reference/stl/vector/

    推荐文章