在参数传递中不能将'b2PolygonShape'转换为'objc_object *'

时间:2010-04-10 06:58:06

标签: objective-c cocoa cocos2d-iphone box2d-iphone

我不确定你们中的很多人是否熟悉box2d物理引擎,但我在cocos2d和Objective c中使用它。

这或多或少可能是一个普遍的目标问题,但我正在执行这个:

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

并在build:

上的addObject定义上收到此错误
cannot convert 'b2PolygonShape' to 'objc_object*' in argument passing

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

这是因为b2PolygonShape不会在它的根处继承NSObject吗?

由于

2 个答案:

答案 0 :(得分:4)

b2PolygonShape是一个C ++类,而不是一个ObjC类。您只能将ObjC实例放入“NS-containers”。

由于您无论如何都需要C ++,最好使用std::vector<b2PolygonShape>

答案 1 :(得分:1)

NS-container类可以(正如KennyTM指出的那样)只存储NSObjects。这有时可能会有点痛苦。但是有很多替代NS容器的替代品。

您可以编写Objective-C包装类(或使用NSValue),并将它们存储在NSArray中。

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

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

结构的链接列表也可以派上用场,并且相当容易创建和维护。

如果您决定坚持使用std :: vector,这是一个很好的解决方案,您可以在以下位置阅读更多相关信息:http://www.cplusplus.com/reference/stl/vector/