我的程序錯誤出在下面一行:如何修復由多態性引起的錯誤?
RAT_Entity* ecm = new RAT_EntityCustomModel();
ecm->Init(entities.size(), resourceManager->getCustomMesh(meshURL));
應該初始化一個孩子的實體,而是它打破我的引擎。是
爲RAT_Entity和RAT_EntityCustomModel的標題如下:
#ifndef RAT_ENTITY_H
#define RAT_ENTITY_H
#include <iostream>
namespace RAT_ENGINE
{
class RAT_Entity
{
public:
RAT_Entity();
~RAT_Entity();
virtual void Init(int argID, void* argVoid);
virtual void CleanUp();
int getID() const;
virtual void PrintIO() const;
protected:
int id;
};
}
#endif
和
#ifndef RAT_ENTITYCUSTOMMODEL_H
#define RAT_ENTITYCUSTOMMODEL_H
#include "RAT_Entity.h"
#include "RAT_CustomMesh.h"
namespace RAT_ENGINE
{
class RAT_EntityCustomModel : public RAT_Entity
{
public:
RAT_EntityCustomModel();
~RAT_EntityCustomModel();
void Init(int argID, RAT_CustomMesh* argMesh);
void CleanUp();
RAT_CustomMesh* getMesh() const;
void PrintIO() const;
private:
RAT_CustomMesh* mesh;
};
}
#endif
正如你所看到的,void RAT_EntityCustomModel::Init(int argID, RAT_CustomMesh* argMesh)
繼承virtual void RAT_Entity::Init(int argID, void* argVoid)
此功能。我需要這樣做,否則我會得到以下錯誤:
1>e:\rat_engine\rat_engine\rat_engine\rat_entitymanager.cpp(34): error C2660: 'RAT_ENGINE::RAT_Entity::Init' : function does not take 2 arguments
但現在我的引擎在調用孩子的功能時會中斷。我怎樣才能解決這個問題?
對於未來:刪除所有不必要的代碼,因爲它降低了可讀性(例如PrintIO,getMesh,私人網等無關你的問題)。如何查看導致「函數不帶2個參數」錯誤的命令? – Spook 2013-03-08 07:46:43
我只能看到「不一致的命名約定」,沒有實現多態! – Nawaz 2013-03-08 07:47:40
除非'RAT_CustomMesh *'與'void *'相同,否則它們不是相同的函數,並且將調用基類函數。虛函數在基類和派生類中必須具有完全相同的參數。 – 2013-03-08 07:51:33