我正在尝试做一些与Objective-C中的@Protocol hinerit 的实例类似的事情,所以我想要一个带有一些声明方法的@Protocol,以及一个我可以覆盖和使用我的方法的实例。
现在我用 C++ 做了一个带有虚拟方法的类,就像他的:
class MyClassA
{
public:
~MyClassA(){};
virtual void doSomething(argument *) = 0;
}
和一个类(我要实例化和使用的类)
class MyClassB : public MyClassA
{
public:
~MyClassB() {};
void doSomething(argument *a);
}
在这两个类的实现文件中,我已经像这样实现了 doSomething() :
void doSomething(argument *a)
{
// yep do something
}
然后在另一个对象(它是 CCNode 的子类)中,我想创建一个 MyClassB 的 ivar,这就是我失败的地方,我尝试将一个简单的指针指向该类,例如:
MyClassB *myB;
然后像这样使用它:
myB->doSomething;
但显然它会因 bad_access 而崩溃
我尝试在使用之前实例化对象
MyClassB *myB = new MyClassB;
或者
MyClassB *myB = MyClassB::create();
但无论我尝试什么,都会出现链接器错误。错误说:
Undefined symbols for architecture i386:
"MyClassB::doSomething(argument*)", referenced from:
AnotherObject::init() in AnotherObject.o
"vtable for MyClassB", referenced from:
AnotherObject::init() in AnotherObject.o
我错过了一些实现相同的东西
id<Protocol>object;
使用我比 C++ 更了解的 Objective-C
附言。我决定编写 Cocos2d,即使这是一个 C++ 问题,因为 init 和 create_func 方法可能在某种程度上相关