J'ai les classes suivantes, Base et Derived et quand je compile le compilateur se plaint qu'il ne peut pas créer une instance de DLog parce qu'il est abstrait. Est-ce que quelqu'un peut me dire comment je peux corriger cette erreur?fonction virtuelle pure et classe abstraite
Je suppose que c'est parce que les deux fonctions virtuelles pures ne sont pas implémentées dans le dérivé.
class Logger
{
public:
virtual void log(int debugLevel, char* fmt, ...) = 0;
virtual void log(string logText, int debugLevel, string threadName = "") = 0;
static Logger* defaultLogger() {return m_defaultLogger;}
static void setDefaultLogger(Logger& logger) {m_defaultLogger = &logger;}
protected:
static Logger* m_defaultLogger;
};
class DLog : public Logger
{
public:
DLog();
~DLog();
static DLog *Instance();
static void Destroy();
void SetLogFilename(std::string filename);
void SetOutputDebug(bool enable);
std::string getKeyTypeName(long lKeyType);
std::string getScopeTypeName(long lScopeType);
std::string getMethodName(long lMethod);
virtual void log(string logText, int debugLevel)
{
Log(const_cast<char*>(logText.c_str()));
}
void Log(char* fmt, ...);
private:
static DLog *m_instance;
std::string m_filename;
bool m_bOutputDebug;
};
// Dlog instantion comme un singleton
DLog *DLog::Instance()
{
if (!m_instance)
m_instance = new DLog();
return m_instance;
}
Vous devez implémenter les PVF dans la classe dérivée, évidemment. –
S'il vous plaît s'il vous plaît s'il vous plaît, ne pas surcharger les fonctions avec une ellipse. Vous épargnera des heures de tiraillement et de débogage tard le soir. –
@Alex: Pas une surcharge ... c'est avec un L majuscule la fonction Log. les autres sont en minuscules ... –