更新:此问题是由于内存使用不当引起的,请参阅底部的解决方案。
这是一些半伪代码:
class ClassA
{
public:
virtual void VirtualFunction();
void SomeFunction();
}
class ClassB : public ClassA
{
public:
void VirtualFunction();
}
void ClassA::VirtualFunction()
{
// Intentionally empty (code smell?).
}
void ClassA::SomeFunction()
{
VirtualFunction();
}
void ClassB::VirtualFunction()
{
// I'd like this to be called from ClassA::SomeFunction()
std::cout << "Hello world!" << endl;
}
等效的 C# 如下:删除了 C# 示例,因为它与实际问题无关。
为什么ClassB::VirtualFunction
调用 from 时不调用函数ClassA::SomeFunction
?而是ClassA::VirtualFunction
被称为...
当我强制实现虚函数ClassA::VirtualFunction 时,如下所示:
class ClassA
{
public:
virtual void VirtualFunction() = 0;
void SomeFunction();
}
class ClassB : public ClassA
{
public:
void VirtualFunction();
}
void ClassA::SomeFunction()
{
VirtualFunction();
}
void ClassB::VirtualFunction()
{
// I'd like this to be called from ClassA::SomeFunction()
std::cout << "Hello world!" << endl;
}
尽管已明确声明和定义了派生函数,但在运行时仍会发生以下错误。
pure virtual method called
terminate called without an active exception
注意:似乎错误可能是由于内存使用不当引起的。有关详细信息,请参阅自我回答。
更新 1 - 4:
已删除评论(不相关)。