小飞将 2019-10-06 16:06 采纳率: 66.7%
浏览 378

error: passing ‘const HasPtr’as‘this’argument of‘HasPtr& HasPtr::operator=(const HasPtr&)’discards qualifiers [-fpermissive]

如题:
HasPtr.h

#include <iostream>
#include <string>

class HasPtr {
public:
    HasPtr(const std::string &s, int a)
        : ps(new std::string(s)), i(a) {}
    HasPtr(const std::string &s = std::string())
        : ps(new std::string()), i(0) {}
    HasPtr(const HasPtr &obj)
        : ps(new std::string(*obj.ps)), i(obj.i) {
            std::cout << "Copy constructor execute" << std::endl;
        }
    HasPtr & operator=(const HasPtr &rhs) {
        ps = new std::string(*rhs.ps);
        i = rhs.i;
        return *this;
    }
    ~HasPtr() {
        delete ps;
    }

    std::string get_str() const {
        return *ps;
    }

    int get_i() const {
        return i;
    }
    bool operator<(const HasPtr obj) const {
        return i < obj.i;
    }

    friend void swap(HasPtr &lhs, HasPtr &rhs) {
        std::swap(lhs.ps, rhs.ps);
        std::swap(lhs.i, rhs.i);
    }

private:
    std::string *ps;
    int i;
};

main.cpp

#include <iostream>
#include <vector>
#include <algorithm>
#include "HasPtr.h"


int main() {
    size_t n = 3;
    std::vector<HasPtr> v;
    for (size_t i = 0; i < n; ++i) {
        v.push_back(std::to_string(i));
    }

    sort(v.cbegin(), v.cend());
}

遇到错误:

error: passing ‘const HasPtr’ as ‘this’ argument of ‘HasPtr& HasPtr::operator=(const HasPtr&)’ discards qualifiers [-fpermissive]

之前搜索的大多数答案是成员函数不是const类型的。但是我的问题处在拷贝赋值运算符上,没有理由要把拷贝赋值运算符也写成const类型对吗?

  • 写回答

1条回答

  • zqbnqsdsmd 2019-10-06 16:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作