j'ai interface simple générale qui ressemble à ceci:C++ objet passant qui en utilisant le type abstrait de classe donne l'erreur: n'est pas membre de GeneralDriverInterface
Class GeneralDriverInterface
{
public:
virtual void Init() = 0;
};
Alors j'ai la classe qui utilise l'une des sous-classe initialisant l'interface GeneralDriverInterface.
class DriverTest : public GeneralDriverInterface
{
public:
DriverTest();
virtual void Init();
bool TestMe();
}
void DriverTest::Init()
{
//init driver stuff
}
bool DriverTest::TestMe()
{
//test driver stuff
}
maintenant pour utiliser cette classe DriverTest il initialisées en classe via la fonction
// in the Processing.h header there is :
GeneralDriverInterface* m_GeneralDriverInterface;
void Processing::InitDriver(GeneralDriverInterface* _GeneralDriverInterface)
{
m_GeneralDriverInterface = _GeneralDriverInterface;
m_GeneralDriverInterface->Init();
m_GeneralDriverInterface->TestMe(); // The problematic call !! where it failed in compilation
}
Il obtient sa classe de pilote via un constructeur de la classe GeneralFactory comme ceci:
GeneralFactory::SetProcessingDriver()
{
GeneralDriverInterface pGeneralDriverInterface = new DriverTest()
m_pProcessing->InitDriver(pGeneralDriverInterface);
}
ok j'ai essayé utiliser l'interface abstraite pour être aussi général que possible, mais obtenir:
error C2039: 'TestMe' : is not a member of 'GeneralDriverInterface'
1> g:\project\GeneralDriverInterface.h(6) : see declaration of 'GeneralDriverInterface'
Ma question est-ce que je dois inclure toutes les fonctions que je vais utiliser dans la classe implémentée?
Vous attendez-vous à ce qu'une classe de base ajoute magiquement tous les membres de toutes ses classes dérivées à sa propre interface? – juanchopanza
Oui, vous avez besoin de toutes les fonctions que vous utilisez via l'interface de l'interface. –