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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM