我必须继承一个具有 5 个虚函数的抽象基类。如果我不实现这 5 个函数,我会得到“如果未实现,则为抽象类类型分配对象”。
当我在派生类中声明和实现时,我得到“体系结构 i386 的未定义符号:“debugDrawer 的 vtable”,引用自:debugDrawer.o 中的 debugDrawer::debugDrawer() 注意:丢失的 vtable 通常意味着第一个非内联虚拟成员函数没有定义。”
子弹物理库中的 btIDebugDraw 类基类如下
class btIDebugDraw
{
virtual void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color)=0;
virtual void reportErrorWarning(const char* warningString) = 0;
virtual void draw3dText(const btVector3& location,const char* textString) = 0;
virtual void setDebugMode(int debugMode) =0;
virtual int getDebugMode() const = 0;
virtual void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color)
}
派生类 debugDrawer.h
class debugDrawer : public btIDebugDraw{
public:
debugDrawer();
void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color);
void reportErrorWarning(const char* warningString);
void draw3dText(const btVector3& location,const char* textString);
void setDebugMode(int debugMode);
int getDebugMode() const;
void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color);
void drawLine(const btVector3& from,const btVector3& to,const btVector3& color);
};
派生类 debugDrawer.mm 文件(我使用的是目标 c,所以它的 .mm 文件)
debugDrawer::debugDrawer(){
}
void debugDrawer::drawLine(const btVector3& from,const btVector3& to,const btVector3& color)
{
float tmp[ 6 ] = { from.getX(), from.getY(), from.getZ(),
to.getX(), to.getY(), to.getZ() };
glPushMatrix();
{
glColor4f(color.getX(), color.getY(), color.getZ(), 1.0f);
glVertexPointer( 3,
GL_FLOAT,
0,
&tmp );
glPointSize( 5.0f );
glDrawArrays( GL_POINTS, 0, 2 );
glDrawArrays( GL_LINES, 0, 2 );
}
glPopMatrix();
}
void drawContactPoint(const btVector3& PointOnB,const btVector3& normalOnB,btScalar distance,int lifeTime,const btVector3& color){
}
void reportErrorWarning(const char* warningString) {
}
void draw3dText(const btVector3& location,const char* textString) {
}
void setDebugMode(int debugMode){
}
int getDebugMode() {
return 0;
}
void drawAabb(const btVector3& from,const btVector3& to,const btVector3& color)
{
}