QT中出现“无法解析的外部符号”错误

解决Qt中类方法调用错误问题
本文解决了一个在Qt环境下使用C++类方法时出现的错误问题,重点介绍了如何正确定义和调用类方法,避免了在链接时无法解析外部符号的错误。通过示例展示了将枚举数据转换为字符串的函数实现,并解决了类方法定义和调用过程中遇到的困惑。

串口中我要把奇偶校验等enum数据对应写到一个ComboBox中去,所以需要在我的Settings类中加入一个函数用来转换。

这里,我首先在settings.h的class Settings中加上对该函数的声明

 1 class Settings : public QDialog
 2 {
 3     Q_OBJECT
 4 
 5 public:
 6     explicit Settings(QWidget *parent = 0);
 7     ~Settings();
 8     QString &stopbit2string(enum QSerialPort::StopBits stop);
 9     QString &parity2string(enum QSerialPort::Parity parity);
10 
11 private slots:
12     void on_buttonBox_accepted();

然后在settings.cpp加上这两个函数的实现,壳

 1 QString &stopbit2string(enum QSerialPort::StopBits stop)
 2 {
 3     QString *ret = new QString("Eitd1");
 4     return *ret;
 5 }
 6 
 7 QString &parity2string(enum QSerialPort::Parity parity)
 8 {
 9     QString *ret = new QString("Eitd2");
10     return *ret;
11 }

这样编译就出错:

error LNK2019: 无法解析的外部符号 "public: class QString __cdecl Settings::parity2string(enum QSerialPort::Parity)"

这回就困惑了,由于我想到QT的编译依赖做得并不是很好,比如.pro文件可能不会随着工程文件的修改而变化,所以我检查了一下该文件,又把工程目录下的debug、release、makefile等都删除了,再清除了工程再重新构建,也还是出同样的错误。

在链接的时候无法解析外部符号,情况多数是这些情况:

1. 符号没有定义而被调用了

2. 符号在某个文件中被定义了,但是当前文件不知道,因为没有声明;

 

据此为出发点,我再去查找了一下C++对类方法的定义与调用的问题。

结果是有收获的,问题是我没有对Settings::parity2string定义,因为我的代码是用以下代码来定义的

1 QString &parity2string(enum QSerialPort::Parity parity)

其实是我疏忽了,写C语言的我,忘记了C++的方法实现需要在前面加上类名,只要把这两个函数改成以下样子就可以了:

 1 QString & Settings::stopbit2string(enum QSerialPort::StopBits stop)
 2 {
 3     QString *ret = new QString("Eitd1");
 4     return *ret;
 5 }
 6 
 7 QString & Settings::parity2string(enum QSerialPort::Parity parity)
 8 {
 9     QString *ret = new QString("Eitd2");
10     return *ret;
11 }

 

转载于:https://www.cnblogs.com/tfanalysis/p/3474207.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值