当我有这样的事情:为什么链接程序在虚拟情况下给我一个错误,而不是在非虚拟情况下?
class A
{
virtual void rat();
};
class B : public A
{
virtual void rat() { ; } //implemented!
};
int main(int argc, char **argv)
{
A *a = new B;
delete a;
}
我得到的链接错误:
,除非我制造基地老鼠纯虚。
然而,当我有这样的:
class A
{
public:
void rat();
};
int main(int argc, char **argv)
{
A a;
}
编译没有问题,不给我一个未定义的引用链接错误,除非我明确地尝试调用函数老鼠在我的主(a.rat();
)。什么是未实现的基类虚函数的规则,但是,在派生类中实现,就像在第一个失败的代码片段中一样?
另请参见:http://stackoverflow.com/questions/4145915 –