Обновление: Эта проблема вызвана неправильным использованием памяти, см. решение внизу.
Вот некоторый полупсевдокод:
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
не вызывается при вызове из 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:
Комментарии удалены (не опубликованы).
Решение:
Опубликовано в качестве ответа.