1
我的編譯器說:公共繼承類不能訪問重載的非虛擬基類的公共方法?
error C2660: 'UberMaterial::Initialize' : function does not take 2 arguments
當我寫這篇文章:
#include "BaseMaterial.h"
#include "UberMaterial.h"
UberMaterial* m_pGameLevelMaterial;
m_pGameLevelMaterial->Initialize(m_pContentManager, m_pLevel->GetDevice());
的基類:
class BaseMaterial
{
public:
BaseMaterial(tstring shaderFilename);
virtual ~BaseMaterial(){}
void Initialize(ContentManager *pContentManager, ID3D10Device *pD3DDevice);
//[More Code...]
protected:
virtual void Initialize(ContentManager *pContentManager) = 0;
//[More Code...]
};
繼承的類:
#include "BaseMaterial.h"
class UberMaterial:public BaseMaterial
{
//[More Code...]
protected:
virtual void Initialize(ContentManager *pContentManager);
//[More Code...]
};
誰能告訴我問題是什麼?
如果您需要更多的代碼,只需評論,我會發布它。但是整件事情相當大,所以我現在沒有包含它。
因爲該方法是在基類重載我使用的是虛擬的,我想,要通過多態性其他代碼訪問重載方法。 我不確定我是否理解你的答案。通過在那裏使用'BaseMaterial :: Initialize',我將能夠訪問基類的方法? – xcrypt 2011-12-29 00:31:54
Ah nvm自我上次編輯以來我明白了。但是一個'using'聲明在一個類中做了什麼?順便說一句,我也可以通過輸入'm_pGameLevelMaterial-> BaseMaterial :: Initialize(m_pContentManager,m_pLevel-> GetDevice())來訪問它;' – xcrypt 2011-12-29 00:35:29
@xcrypt:'using'會將基礎成員帶入範圍,否則它將被隱藏。 – ildjarn 2011-12-29 01:27:17