错误:传递"常量..."作为"这个"的论点"..."丢弃限定符

error: passing ‘const …'’ as ‘this’ argument of ‘…’ discards qualifiers

本文关键字:传递 常量 作为 这个 错误      更新时间:2023-10-16

我在这里、这里或这里遇到了同样的问题,除了我为参数和函数添加了 const:

#include <unordered_map>
#include <functional>
namespace zzz {
struct identity_t {
    static const int ID_SIZE = 5;
    static const int LSB = 4; // = ID_SIZE - 1
    unsigned char id[ID_SIZE];
    inline bool operator< (const identity_t& rhs) const {
        for (int i = 0; i < ID_SIZE; i++) if (id[i] != rhs.id[i]) return (id[i] < rhs.id[i]);
        return false; // equal
    }
    unsigned char operator[] (const int& i) {return id[i];}
};
class hash_identity_t {
public:
    long operator()(const identity_t& x) const {
        return (long) x[identity_t::LSB];
    }
};
class equal_to_identity_t {
public:
     bool operator()(const identity_t& lhs, const identity_t& rhs) const {
         for (int i = 0; i < identity_t::ID_SIZE; i++) if (lhs[i] != rhs[i]) return false;
          return true;
     }
};

但是我有相同的编译错误:

error: passing 'const zzz::identity_t' as 'this' argument of 'unsigned char zzz::identity_t::operator[](const int&)' discards qualifiers [-fpermissive]

您正在尝试在函数long hash_identity_t::operator( const identity_t& x ) const中的const参数上调用非const函数(identity_t::operator[])。

使identity_t::operator[]恒定。

//--------------------------------------vvvvv
unsigned char operator[] (const int& i) const {return id[i];}

使用at() std::map的方法。

const mapped_type & at (const key_type &__k) const