大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
Qt 错误: LNK2019: 无法解析的外部符号 原因及解决办法
删除Qt中的一些用不到的函数或者添加一个新的.ui窗口的时候,我遇到了这个LINK2019无法解析的外部符号错误,网上查了半天可算解决了,写篇博客记录下。
错误原因1:函数(一般是槽函数)在.h中声明,但却没有实现
如图,我在自己的automatic.c文件中生成了一个按钮的点击处理函数,后面不想用了,把它删掉了,但是在automatic.h中忘记删掉声明了,于是系统编译报错。所以删掉声明就好。
错误原因2:添加新的.ui窗体文件时编译器没有为它生成新的.obj文件而报错,需要重新执行qmake,而不是重新构建项目
首先我新建了一个界面,名为p1553B2,之后在automatic.h文件中,我include p1553B2的头文件,并且为界面类p1553B2声明了一个对象P1553B_2
#ifndef AUTOMATIC_H
#define AUTOMATIC_H
#include <QWidget>
#include <QtGui>
#include <QtWidgets>
#include "P1553B2.h" // 包含新窗体的头文件
namespace Ui {
class Automatic;
}
class Automatic : public QWidget
{
Q_OBJECT
public:
explicit Automatic(QWidget *parent = 0);
~Automatic();
private slots:
void on_P1553B2_clicked();
private:
Ui::Automatic *ui;
p1553B2 P1553B_2; // 为新窗体声明一个对象
};
#endif // AUTOMATIC_H
之后,我在automatic.c中的一个button的响应函数中调用P1553B_2.show();让这个界面显示
void Automatic::on_P1553B2_clicked()
{
P1553B_2.show();
}
编译的结果是错误,无法解析的外部符号
之后,我选择 构建->执行qmake,执行成功后再选择构建->构建项目Automatic3,就成功了,程序可以正常执行。
其它办法:删除debug或release路径下的文件或许也可以解决
网上有博客说删除debug或release(看你编译是用什么编译的了)下的全部文件有时可解决这个问题,我试了试,没成功,这个方法并不适用于我遇到的问题,不过也不失为一种可行方法。查看自己编译路径的方法见下图,选择shadow build意思是编译路径和程序路径分开,也即可以自己选择路径,勾掉的话编译文件会和程序源文件在一起。注意删除debug或者release文件的时候不要直接把这个文件夹删了,而是要把文件里面的内容删了,不然会报找不到文件或者其它谜之错误。
最后补充一句:看自己项目的编译器在左下角看
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185389.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...