C++ cocos2dc++;从虚拟类继承会导致链接器错误

C++ cocos2dc++;从虚拟类继承会导致链接器错误,c++,cocos2d-iphone,protocols,virtual,C++,Cocos2d Iphone,Protocols,Virtual,我试图做一些类似于Objective-C中@Protocol的实例,因此我希望有一个@Protocol和一些声明的方法,以及一个可以重写和使用我的方法的实例 用C++做了一个类的虚拟方法,喜欢他的: class MyClassA { public: ~MyClassA(){}; virtual void doSomething(argument *) = 0; } 和一个类(我想要实例化和使用的类) 在这两个类的实现文件中,我实现了doSomething(),如下所示: void doSo

我试图做一些类似于Objective-C中@Protocol的实例,因此我希望有一个@Protocol和一些声明的方法,以及一个可以重写和使用我的方法的实例

用C++做了一个类的虚拟方法,喜欢他的:

class MyClassA
{

public:
~MyClassA(){};
virtual void doSomething(argument *) = 0;

}
和一个类(我想要实例化和使用的类)

在这两个类的实现文件中,我实现了doSomething(),如下所示:

void doSomething(argument *a)
{
 // yep do something
}
然后在另一个对象(CCNode的子类)中,我想创建MyClassB的ivar,这是我失败的地方,我尝试将一个简单指针放在类上,如:

MyClassB *myB; 
然后像这样使用它:

myB->doSomething;
但很明显,如果访问不好,它会崩溃

在使用之前,我尝试实例化该对象

MyClassB *myB = new MyClassB;

但不管我怎么做都会出现链接错误。错误显示:

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; 
idobject;
用我比C更了解的objective-C++


我决定写COCOS2D,即使这是一个C++问题,因为init和CuraTyFunc方法可能在某种程度上与

< P>实现<代码> MyCaseB:::DOMMETHONSE()。您声明了它,使用了它,因此必须实现它

您必须在实现文件中实现doSomething(),如

void MyClassB::doSomething(argument *a)
{
 // yep do something
}

不像
void doSomething(参数*a)
实现
MyClassB::doSomething()
。您声明了它,使用了它,因此必须实现它

您必须在实现文件中实现doSomething(),如

void MyClassB::doSomething(argument *a)
{
 // yep do something
}

不像
void doSomething(参数*a)
实现
MyClassB::doSomething()
。您声明了它,使用了它,因此必须实现它

您必须在实现文件中实现doSomething(),如

void MyClassB::doSomething(argument *a)
{
 // yep do something
}

不像
void doSomething(参数*a)
实现
MyClassB::doSomething()
。您声明了它,使用了它,因此必须实现它

您必须在实现文件中实现doSomething(),如

void MyClassB::doSomething(argument *a)
{
 // yep do something
}
不像
void doSomething(参数*a)

在这两个类的实现文件中,我实现了doSomething(),如下所示:

void doSomething(argument *a)
{
 // yep do something
}
所以您定义了一个同名的非成员函数。您想要定义成员函数:

void MyClassB::doSomething(argument *a)
     ^^^^^^^^^^
在这两个类的实现文件中,我实现了doSomething(),如下所示:

void doSomething(argument *a)
{
 // yep do something
}
所以您定义了一个同名的非成员函数。您想要定义成员函数:

void MyClassB::doSomething(argument *a)
     ^^^^^^^^^^
在这两个类的实现文件中,我实现了doSomething(),如下所示:

void doSomething(argument *a)
{
 // yep do something
}
所以您定义了一个同名的非成员函数。您想要定义成员函数:

void MyClassB::doSomething(argument *a)
     ^^^^^^^^^^
在这两个类的实现文件中,我实现了doSomething(),如下所示:

void doSomething(argument *a)
{
 // yep do something
}
所以您定义了一个同名的非成员函数。您想要定义成员函数:

void MyClassB::doSomething(argument *a)
     ^^^^^^^^^^


您需要为
MyClassB::doSomething(参数*)
提供一个实现。在上面的代码中,您只显示了它的声明,看起来您要么没有实现它,要么没有将实现它的文件添加到构建中。顺便说一句,如果你的类有任何
virtual
函数,你最好也让析构函数
virtual
!尝试在子类b中省略doSomething的声明objc之外的可能重复协议通常称为“接口”,您需要为
MyClassB::doSomething(参数*)
提供实现。在上面的代码中,您只显示了它的声明,看起来您要么没有实现它,要么没有将实现它的文件添加到构建中。顺便说一句,如果你的类有任何
virtual
函数,你最好也让析构函数
virtual
!尝试在子类b中省略doSomething的声明objc之外的可能重复协议通常称为“接口”,您需要为
MyClassB::doSomething(参数*)
提供实现。在上面的代码中,您只显示了它的声明,看起来您要么没有实现它,要么没有将实现它的文件添加到构建中。顺便说一句,如果你的类有任何
virtual
函数,你最好也让析构函数
virtual
!尝试在子类b中省略doSomething的声明objc之外的可能重复协议通常称为“接口”,您需要为
MyClassB::doSomething(参数*)
提供实现。在上面的代码中,您只显示了它的声明,看起来您要么没有实现它,要么没有将实现它的文件添加到构建中。顺便说一句,如果你的类有任何
virtual
函数,你最好也让析构函数
virtual
!试着在子类B中省略doSomething的声明objc之外的可能重复协议通常被称为“接口”ok抱歉,这可能太明显了,我没有告诉你,但是,我已经在MyClassA(父级)中实现了它然后在MyClassB:P中,我要更新我的问题,我想错误在于我初始化了这个类的对象,这个对象来自我的接口,这是我缺少的,有人能给我举个例子吗?我做的方式肯定是错误的,好像我没有忘记写,但是我忘了写得很好,C++是新的,我很抱歉这个愚蠢的错误!好的,很抱歉,这可能太明显了,我没有告诉你,但是,我已经在MyClassA(父级)中实现了它,然后在MyClassB:P中,我将更新我的问题。我认为错误在于我从接口初始化了该类的对象,这是我缺少的,有人能给我举个例子吗?T