我必須繼承具有5個虛函數的抽象基類。如果我沒有實現這5個函數,我會得到「如果未實現,爲抽象類類型分配一個對象」。如果未實現,爲abstact類類型分配對象,如果聲明並定義了缺少vtable錯誤
當我宣佈在派生類中實現我得到 「爲i386硬件架構未定義的符號: ‘虛函數表的debugDrawer’,從引用:在debugDrawer.o 注意 debugDrawer :: debugDrawer():缺少虛函數表通常意味着第一個非內聯虛擬成員函數沒有定義。「從子彈物理庫
類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)
{
}
在我看來,你的'drawAabb'實現(和其他幾個人)缺少'debugDrawer ::'符。 – DCoder 2012-08-13 06:52:24
這些函數是虛擬函數,用於避免「爲抽象類類型分配對象」。我已經實現了我想的所有功能。它是空的,但確實有一個定義 – 2012-08-13 09:38:33
不,你實現了具有相同名稱的全局函數,而不是類成員函數。請參閱[maxbc的答案](http://stackoverflow.com/a/11931617/1233508)。 – DCoder 2012-08-13 09:45:03