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

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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀