zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    jar-下载站点
    java-原生爬虫机制源码
    eclipse-插件安装的三种方式
    ivy,ivyde插件-eclipse
    cygwin-介绍-安装
    cygwin-使用介绍
    linux-命令全集
    jquery-遍历each
    SSD固态硬盘的闪存芯片颗粒介绍
    java-测试synchronized使用xxx.class和this使用的区别
  • 原文地址:https://www.cnblogs.com/tfanalysis/p/3474207.html
Copyright © 2011-2022 走看看