0

我想实现一个共享库的纯虚函数并在一个库函数中调用它。这个库函数将在库的构造函数中调用。包含纯虚函数的类位于自己的命名空间中。它看起来像这样:

//shared lib class:
namespace A{
namespace B{

class SharedLibClass : public object{
public:
          SharedLibClass(){init();}

protected:
          virtual const object* func()const=0;
private:
          void init(){const object* obj=func();}

}
}//namespace B
}//namespace A

//implementation class using the shared lib:
class B : public A::B::SharedLibClass
{
protected:
          virtual void func(){return this;}
}

这是我的课。我可以毫无问题地编译它们,但是当我运行它时,Qt 会打印出以下错误:

pure virtual method called
terminate called without an active exception

我可以想象问题是,父类在初始化之前调用虚函数或类似的东西。我怎么解决这个问题?

4

1 回答 1

0

你不能声明函数void然后从中返回一些东西。如果你想让它实现现有的纯虚函数,你需要用完全相同的签名声明你的函数:

class B : public A::B::SharedLibClass {
protected:
  virtual const object* func() const { /* your implementation */ }
}

任何好的编译器都会在编译时识别出这些问题。检查错误报告,也许你的构建过程有问题(也许你的文件根本没有编译?)。

于 2013-06-08T18:48:07.420 回答