c++ operator==重载运算符编译错误问题

设计了一个App类,需要对运算符==进行重载,但是在过程中遇到了一个错误,如下所示:

error: no match for 'operator==' (operand types are 'const App' and 'const App')

 类的代码如下:

#ifndef APP_H
#define APP_H

#include <QObject>
#include <QString>
#include <QIcon>
#include <QVector>
#include "commonheader.h"

class App : public QObject
{
    Q_OBJECT
public:
    explicit App(QObject *parent = nullptr);
    App(const App& app);
    operator =(const App& app){
        m_sAppName = app.m_sAppName;
        m_bIsOpen = app.m_bIsOpen;
        m_icon = app.m_icon;
        m_index = app.m_index;
        m_vPageCfg = app.m_vPageCfg;
    }

private:
    QString m_sAppName;  //app名称
    int m_id; //计数,暂时可能用不到
    bool m_bIsOpen;   //该app是否已经打开过,打开过表示已经将子进程中对应的界面绑定到该app界面
    QIcon m_icon;  //该app对应的图标
    int m_index;  //该app打开后的界面对应的stackedwidget的索引。从0开始,默认值为-1
    QVector<SINGLE_PAGE_INFO> m_vPageCfg;  //该app对应的窗口页面配置
public:
    void setOpenStatus(bool flag);  //设置该app是否打开
    bool getIsOpenStatus();  //查询该app是否已经打开
    void setAppName(QString name);  //设置app的名字
    QString getAppName() const;  //查询app的名字
    void setAppIcon(QIcon icon);   //设置app的图标
    void bindAppToStackedWidgetIndex(int index);  //该app与stackedwidgget的具体索引绑定
    void AddWinIdToV(SINGLE_PAGE_INFO pageCfg);  //在vecotr中添加子进程页面配置信息
    void clearAllVectorData();  //情况vector中的所有数据
    int getAppBindIndex();  //获取该app绑定的stackedwidget index
    void setPageCfgInfo(QVector<SINGLE_PAGE_INFO> vcfg);  //设置app下的页面配置信息,包含标签名称和窗口id
    bool operator==(const App& app)
    {
        if(m_sAppName == app.m_sAppName)
            return true;
        return false;
        //return ((m_sAppName == app.m_sAppName)?true:false);
    }

};

#endif // APP_H

遇到问题后,百思不得其解,为什么会出现这个错误?从这个错误的直译来看就是App没有匹配的==运算符重载,但是头文件中确实已经对该运算符进行了重载。

总结:

通过网络上查找资料,发现解决问题的方法是在operator==后添加了一个关键字,标识该函数是一个常函数。

    bool operator==(const App& app)const
    {
        if(m_sAppName == app.m_sAppName)
            return true;
        return false;
        //return ((m_sAppName == app.m_sAppName)?true:false);
    }

问题虽然解决了,但是仍然不理解,这里引申出了const(常对象)的概念,疑惑有以下几点:

#include <QCoreApplication>
#include <iostream>
using namespace std;
class Person{
public:
    string m_Name;
    int m_Age;
    Person(string name, int age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
    printTest(){
        cout<<m_Name<<m_Age<<endl;
    }
    bool operator ==(const Person& p)
    {
        return (this->m_Name == p.m_Name) && (this->m_Age == p.m_Age);
    }
};

int main(void)
{
    Person const  person("lilei", 20);
    cout<<"name = "<<person.m_Name<<endl; //这里可以访问普通成员变量
    //person.printTest();  //编译错误,这里printTest函数必须添加const关键字才可以编译通过
    system("pause");
    return 0;
}

希望有知道的朋友给在下留言解惑,不胜感激!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值