открытый унаследованный класс не может получить доступ к перегруженному не виртуальному публичному методу базового класса? - PullRequest
1 голос
/ 29 декабря 2011

Мой компилятор говорит:

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...]
};

Может кто-нибудь сказать мне, в чем проблема?

Если вам нужен дополнительный код, просто прокомментируйте, и я опубликую его,Но все это довольно большое, поэтому я не включил его в этот момент.

1 Ответ

4 голосов
/ 29 декабря 2011

Да, по умолчанию перегрузка в производном классе будет скрывать другую перегрузку от базового класса.Вы можете повторно открыть перегрузку базового класса с помощью using:

class UberMaterial : public BaseMaterial
{
    ...

public:
    using BaseMaterial::Initialize;

    virtual void Initialize(ContentManager *pContentManager);
};
...