gpt4 book ai didi

声明纯虚函数时 C++ LNK2001 错误

转载 作者:行者123 更新时间:2023-11-30 03:28:54 25 4
gpt4 key购买 nike

我有两个类,基类A和派生类B。定义如下:

Class A {
public:
A()
{
ImpleDefinition();
}
~A()=default:

protected:
virtual void ImplDefinition()=0;
}

class B : public A
{
public:
B() : A()
{
}
~B()=default;

private:
void ImplDefinition() override
{
/*Some detailed implementation*/
}
}

因此,在编译此代码时,编译器报告“error LNK2001:无法解析的外部符号”错误。从代码本身来看,我看不出我犯了任何错误。有趣的是,如果我将“ImplDefinition”从纯虚函数更改为虚函数。

void ImplDefinition() {};

然后一切正常。这种情况该如何解释?

最佳答案

问题是您在 A::A() 中调用虚函数 ImplDefinition()。当在基类的构造函数中,当前对象始终是基类子对象,派生类部分根本不构造;这将在稍后执行。那么纯虚的A::ImplDefinition()就会被调用并导致错误;这里没有动态调度,B::ImplDefinition() 根本不会被调用。

进一步阅读When my base class’s constructor calls a virtual function on its this object, why doesn’t my derived class’s override of that virtual function get invoked?

关于声明纯虚函数时 C++ LNK2001 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46230368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com