gpt4 book ai didi

c++ - 如何从派生类函数中调用虚函数

转载 作者:行者123 更新时间:2023-11-28 01:15:24 26 4
gpt4 key购买 nike

我正在尝试使用指向派生类的指针从派生类函数中调用虚函数。在基类中它是一个纯虚函数,但是派生类定义了它。但是,我收到一个链接器错误,指出该函数未定义。编译器知道定义,因为当我注释掉定义时它会提示派生类是抽象的。

我的代码比下面的更复杂,但在尝试隔离错误时,我已将其削减到生成链接器错误的确切位。有什么想法吗?

struct Derived;

struct Base
{
virtual Derived*func( Base*)=0;
virtual ~Base(){}
};

struct Derived : Base
{
Derived*func(Base*)
{
// do stuff here
return nullptr; // actual code returns a non-null
}

Derived*operate( Derived*arg)
{
// do stuff here
return Base::func(static_cast<Base*>(arg));
}
};

int main()
{
Derived *pt = new Derived();
pt->operate(nullptr); // linker error
pt->func(nullptr); // okay, compiles and runs as expected
return 0;
}

最佳答案

通过做:

Base::func(static_cast<Base*>(arg));

您正在调用 func()Base 版本,这显然不存在。

相反,您可能打算调用 Derived::func(),您可以将其称为 func()

func(static_cast<Base*>(arg));

关于c++ - 如何从派生类函数中调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883009/

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