【发布时间】:2011-12-22 21:23:03
【问题描述】:
我得到了我写的这个界面:
#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; }
【问题讨论】:
标签: c++ inheritance linker abstract-class