伪代码(这是我的班级):
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没有向我显示我文件中任何特定行的错误 - 它只显示在构建日志中,而且都是。
答案 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
第一个参数调用它,但是您的函数只接受非常量参数。