使用==运算符的自定义类比较向量

时间:2013-01-12 09:02:39

标签: c++ list vector comparison containers

伪代码(这是我的班级):

struct cTileState   {
        cTileState(unsigned int tileX, unsigned int tileY, unsigned int texNr) : tileX(tileX), tileY(tileY), texNr(texNr) {}
        unsigned int tileX;
        unsigned int tileY;
        unsigned int texNr;

        bool operator==(const cTileState & r)
        {
            if (tileX == r.tileX && tileY == r.tileY && texNr == r.texNr) return true;
            else return false;
        }
    };

然后我有两个容器:

       std::list < std::vector <cTileState> > changesList;  //stores states in specific order
       std::vector <cTileState> nextState;

在程序中的某个地方,我想在我的州交换功能中执行此操作:

      if (nextState == changesList.back()) return;

然而,当我想编译它时,我对我的错误有一些无意义,例如:

  

/ usr / include / c ++ / 4.7 / bits / stl_vector.h:1372:58:'bool std :: operator ==(const std :: vector&lt; _Tp,_Alloc&gt;&amp;,const std ::) vector&lt; _Tp,_Alloc&gt;&amp;)[with _Tp = cMapEditor :: cActionsHistory :: cTileState; _Alloc = std :: allocator]'

     

错误:将'const cMapEditor :: cActionsHistory :: cTileState'作为'this'参数传递给'bool cMapEditor :: cActionsHistory :: cTileState :: operator ==(const cMapEditor :: cActionsHistory :: cTileState&amp;)'丢弃限定符[-fpermissive]

它说stl_vector.h中有些东西是错的,我不尊重const限定符,但老实说,没有我不尊重的const限定符。这有什么不对?

更重要的是,ide没有向我显示我文件中任何特定行的错误 - 它只显示在构建日志中,而且都是。

1 个答案:

答案 0 :(得分:4)

您需要使您的成员函数const,以便它接受const this参数:

bool operator==(const cTileState & r) const
                                      ^^^^^

更好的是,让它成为一个自由的功能:

bool operator==(const cTileState &lhs, const cTileState & rhs)

使成员函数const大致对应const中的const cTileState &lhs,而非const成员函数则具有cTileState &lhs等价函数。错误指向的函数尝试使用const第一个参数调用它,但是您的函数只接受非常量参数。