无法从目标C实例化C ++类

时间:2011-10-30 00:25:09

标签: objective-c objective-c++

我正在将C ++与ObjectiveC混合用于Cocos2d(objective-C)和Box2D(C ++)项目。

我有以下C ++类:

class ActorListener : public b2ContactListener
{ 
    public :
    const b2Body* Owner;

    ActorListener(const b2Body* owner);
    ~ActorListener();

    virtual void BeginContact(b2Contact* contact);
    virtual void EndContact(b2Contact* contact);
    virtual void PreSolve(b2Contact* contact, const b2Manifold* oldManifold);    
    virtual void PostSolve(b2Contact* contact, const b2ContactImpulse* impulse);
};

我尝试初始化:

(标题中)

ActorListener* Listener;

(mm文件)

Listener = new ActorListener(Body); 

我收到错误:

Undefined symbols for architecture i386:
  "vtable for ActorListener", referenced from:
      ActorListener::ActorListener(b2Body const*)in ActorListener.o
      ActorListener::ActorListener(b2Body const*)in ActorListener.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

2 个答案:

答案 0 :(得分:4)

vtable与该类的第一个虚函数在同一文件中发出。在这种情况下,~ActorListener()是第一个虚拟方法,因为b2ContactListener::~b2ContactListener()是虚拟的。你还记得在某个地方定义ActorListener::~ActorListener()吗?

答案 1 :(得分:0)

诀窍是让XCode使用g ++来进行链接。您可以通过在链接行上包含C ++源文件来强制执行此操作 - 即使是假的,基本上是空的 - 或者(我认为)通过显式链接/usr/lib/libstdc++.6.dylib来强制执行此操作。