我正在开发 C++ Qt 应用程序。我有一个抽象类和两个 child 。其中一个子项完全按照应有的方式工作,但第二个会导致错误:
Freewer.obj:-1: Error: LNK2001: unresolved external symbol "public: virtual void __thiscall Sierpinski::render(class QPainter &,class QRect)" (?render@Sierpinski@@UAEXAAVQPainter@@VQRect@@@Z)
File not found: Freewer.obj
问题是,两个 child 的定义方式相同。
让我们向您展示我的代码。
分形.h:
#ifndef FRACTAL_H
#define FRACTAL_H
#include <QPainter>
#include <QRect>
#include <QDebug>
class Fractal
{
public:
virtual void render(QPainter &painter, QRect target) = 0;
};
#endif // FRACTAL_H
康托.h:
#ifndef CANTOR_H
#define CANTOR_H
#include "Fractal.h"
class Cantor : public Fractal
{
public:
void render(QPainter &painter, QRect target) Q_DECL_OVERRIDE;
};
#endif // CANTOR_H
康托尔.cpp:
#include "Cantor.h"
void Cantor::render(QPainter &painter, QRect target)
{
Q_UNUSED(painter);
Q_UNUSED(target);
qDebug() << "Rendering Cantor's Discontinuum...";
}
谢尔宾斯基.h:
#ifndef SIERPINSKI_H
#define SIERPINSKI_H
#include "Fractal.h"
class Sierpinski : public Fractal
{
public:
void render(QPainter &painter, QRect target) Q_DECL_OVERRIDE;
};
#endif // SIERPINSKI_H
谢尔宾斯基.cpp:
#include "Sierpinski.h"
void Sierpinski::render(QPainter &painter, QRect target)
{
Q_UNUSED(painter);
Q_UNUSED(target);
qDebug() << "Rendering Sierpinski triangle...";
}
现在,当我想创建 Cantor 类的实例时,它可以正常工作。但是当我想创建一个 Sierpinski 类的实例时,它会导致我上面写的错误。
当我以这种方式更改 Sierpinsky 头文件时:
谢尔宾斯基.h:
#ifndef SIERPINSKI_H
#define SIERPINSKI_H
#include "Fractal.h"
class Sierpinski : public Fractal
{
public:
void render(QPainter &painter, QRect target)
{
Q_UNUSED(painter);
Q_UNUSED(target);
qDebug() << "Rendering Sierpinski triangle...";
}
};
#endif // SIERPINSKI_H
而且我不会使用 Sierpinski.cpp,一切正常。是不是很奇怪?你能帮我吗?我哪里有错?我想像 Cantor 一样使用 Sierpinski 定义。
非常感谢。
编辑:
在 @Joachim Isaksson 的问题之后,我尝试以与 Cantor 和 Sierpinski 相同的方式添加另一个分形,但我遇到了与 Sierpinski 相同的错误。新类(class)称为 Koch,它不起作用。但是当我离开 Koch.cpp 文件并直接在头文件中使用渲染函数的定义时,一切正常。
最佳答案
首先,您误用了“ child ”一词。你的意思是子类。 child 在 Qt 世界中意味着不同的东西。
可能的原因是你的qmake工程文件的SOURCES
变量中没有相应的源文件。
一旦你做了修改,确保 qmake 正确地重新运行。
关于C++ 重写虚方法抛出错误 "LNK2001: unresolved external symbol",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897579/