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

串口中我要把奇偶校验等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 }

 

你可能感兴趣的:(qt)