所以,假设我有一个像这样的基类:
class Whatever
{
virtual void Execute() = 0;
};
我有一个实现Whatever
的课程:
class WhateverImplementation : public Whatever
{
virtual void Execute();
}
还有其他一些课程:
class Container
{
private:
Whatever *m_whatever;
public:
void setWhatever(Whatever *whatever)
{
m_whatever = whatever;
}
}
我打电话给setWhatever(new WhateverImplementation());
,
调用m_whatever->Execute()
时线程抛出分段错误。
答案 0 :(得分:0)
WhateverImplementation
需要成为Whatever
的子类才能实现此功能,但您的代码并未反映出这一点。我有点惊讶你的编译器没有抱怨。
尝试
class WhateverImplementation : virtual Whatever
{ .... };
(或其他内容而不是virtual
,例如public
。在此解释您需要的内容可能有点多了。)
此外,您确定在Container
实例上工作,例如
Container mycontainer();
mycontainer.setWhatever(new WhateverImplementation);
此外,您使用new
而没有任何delete
会让我怀疑您可能正在构建内存泄漏,因此请确保在您不需要时销毁m_whatever
了。
此外,您的问题中有声明,但没有定义,这可能不好(但是,您的编译器应该抱怨)。