C++ C++;-对“vtable”的未定义引用
我想知道为什么会出现这样的错误: 对“vtable for BaseRenderer”的未定义引用 我试着四处寻找,但似乎无法找到答案。我试着去掉虚函数,删除构造函数,等等 我的棒球手C++ C++;-对“vtable”的未定义引用,c++,qt,C++,Qt,我想知道为什么会出现这样的错误: 对“vtable for BaseRenderer”的未定义引用 我试着四处寻找,但似乎无法找到答案。我试着去掉虚函数,删除构造函数,等等 我的棒球手 class BaseRenderer : public Renderer { Q_OBJECT public: BaseRenderer(); BaseRenderer(QWidget *parent); void paintGL();
class BaseRenderer : public Renderer
{
Q_OBJECT
public:
BaseRenderer();
BaseRenderer(QWidget *parent);
void paintGL();
virtual ~BaseRenderer();
public slots:
void loadDialog();
signals:
protected:
Mesh loadMesh(string fileName);
private:
OBJParser objParser;
Mesh baseTerrain;
};
我的BaseRender.cpp
BaseRenderer::BaseRenderer() <------ Error leads me here
{
}
BaseRenderer::BaseRenderer(QWidget *parent) : Renderer(parent)
{
}
BaseRenderer::~BaseRenderer()
{
//dtor
}
BaseRenderer::BaseRenderer()我认为这条毫无帮助的消息实际上是在抱怨您没有为BaseRenderer
类中的其他函数提供定义,作为您的<代码> BaseEnter。CPP < /C>文件似乎只有构造函数和析构函数。< P>参见'C++ FAQLite .< /P>< P> >确保您实现了所有声明的方法,特别是槽。然后检查您的头是否列在.pro文件的HEADERS部分中,然后运行qmake。因为Q_对象位于父类Renderer中,所以您不必同时包含它BaseRenderer。只要去掉Q_对象,它就会工作:)我想这和我问这个问题时遇到的问题是一样的:
试着像paxdiablo和Tobias建议的那样重新运行qmake。传递给编译器的参数是什么?@John-这是一个Qt宏,这意味着这个源文件必须通过一个单独的Qt工具(moc.exe
)来运行,才能为特定于Qt的行为(如插槽和信号)生成一系列代码。@Birrree:Ah。我对Qt一点也不熟悉,所以我会退出这一步,或者,如果你使用qmake,它会在你的makefile中为你生成moc命令。检查你的头是否列在.pro文件的HEADERS部分。它对我有效。你能详细说明为什么移除Q_对象可以解决这个问题吗?我从QWidget中创建了一个子类,如果在子类中添加插槽,这是行不通的。另请参见,例如,一些文档(在此网站上搜索)建议Q_对象
应始终存在于QObject
直接或间接子类中。