У меня есть этот интерфейс, который я написал:
#ifndef _I_LOG_H
#define _I_LOG_H
class ILog {
public:
ILog();
virtual ~ILog();
virtual void LogInfo(const char* msg, ...) = 0;
virtual void LogDebug(const char* msg, ...) = 0;
virtual void LogWarn(const char* msg, ...) = 0;
virtual void LogError(const char* msg, ...) = 0;
private:
Monkey* monkey;
};
#endif
Методы являются чисто виртуальными и, следовательно, должны быть реализованы путем получения классов.
Если я пытаюсь создать класс, который наследует этот интерфейс, я получаю следующие ошибки компоновщика:
Undefined reference to ILog::ILog
Undefined reference to ILog::~ILog
Я понимаю, почему существует виртуальный деструктор (чтобы убедиться, что деструктор производного вызывается), но я не понимаю, почему я получаю эту ошибку компоновщика.
РЕДАКТИРОВАТЬ: Хорошо, поэтому мне нужно также определить виртуальный деструктор.
Но могу ли я по-прежнему выполнять вещи в определении виртуального деструктора, или он просто вызовет мой деструктор производных классов и пропустит его?
Мол, сработает ли это:
virtual ~ILog() { delete monkey; }