gpt4 book ai didi

c++ - 对vtable的 undefined reference (相同的旧问题,几乎没有区别)

转载 作者:行者123 更新时间:2023-12-02 10:34:56 24 4
gpt4 key购买 nike

我已经在网上搜索了此问题,发现了一堆类似的问题,但是我无法完全按照我的代码来解决所有这些信息。我是一个初学者。

我正在获取undefined reference to vtable for Character error。下面的代码。

Character.h:

#ifndef CHARACTER_H_
#define CHARACTER_H_
#include "ZorkUL.h"
#include <QObject>

#include <string>
using namespace std;
#include <vector>
using std::vector;

class Character : public QObject {
Q_OBJECT
private:
int health;
int stamina;
public:
Character();
void setHealth(void);
void setStamina(void);

signals:
void listener();
};
#endif /*CHARACTER_H_*/

Character.cpp:
#include "Character.h"

Character::Character() {
this->health = 100;
this->stamina = 100;
}

void Character::setHealth(void){
this->health = health - 10;
}

void Character::setStamina(void){
this->stamina = stamina - 10;
}

void Character::listener(){
}

最佳答案

经过大约一个月的Google筛选以找到该问题的答案之后,我终于可以解决了。

大多数答案将告诉您删除构建目录,或再次运行qmake,依此类推,其背后的想法(高度简化)是QT的Meta Object Compiler为类中带有.cpp宏的类生成了其他Q_OBJECT文件,并且当将使用Q_OBJECT宏的其他文件添加到项目中时,有时可以“忘记”生成这些文件。

尽管在大多数情况下是这样,但为我解决问题的方法是在我自己最终检查了mainwindow_moc.cpp文件之后发生的。

来发现我导入到我的项目中的外部Qt小部件(此后已停止使用,但忘记从项目中取出源文件)有一些 namespace 声明和using语句,这些语句似乎在生成mainwindow_moc.cpp时使MOC感到困惑文件。

结果,MOC生成了我的MainWindow函数,该函数的作用域位于此额外的小部件 namespace 下,并且生成的代码看起来像extra_namespace::MainWindow::staticMetaObject,而不是MainWindow::staticMetaObject

因此,对我来说,解决方案是从我的.pro文件中删除该小部件,然后将所有#include指令删除至这些头文件。

因此,如果第一种解决方案不适合您,即删除构建目录并手动运行qmake。.查看构建目录中生成的classname_moc.cpp文件,并确保Q_OBJECT宏所需的生成函数的作用域正确地。

关于c++ - 对vtable的 undefined reference (相同的旧问题,几乎没有区别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60709790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com