3

疑似コード (これは私のクラスです):

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;
        }
    };

次に、2 つのコンテナーがあります。

       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<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&) [with _Tp = cMapEditor::cActionsHistory::cTileState; _Alloc = std::アロケーター]'</p>

エラー: 'const cMapEditor::cActionsHistory::cTileState' を 'bool cMapEditor::cActionsHistory::cTileState::operator==(const cMapEditor::cActionsHistory::cTileState&)' の 'this' 引数として渡すと、修飾子が破棄されます [-fpermissive]

stl_vector.h に何か問題があり、const 修飾子を尊重しないと書かれていますが、正直なところ、私が尊重しない const 修飾子はありません。ここで何が問題なのですか?

さらに、ide はファイルの特定の行にエラーを表示しません。ビルド ログに表示されるだけです。

4

1 に答える 1

6

引数constを受け入れるように、メンバー関数を作成する必要があります。const this

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

さらに良いのは、無料の関数にすることです。

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

メンバー関数を作成することはinにconstほぼ対応しますが、非 const メンバー関数には同等のものがあります。エラーが指している関数は、最初の引数でそれを呼び出そうとしますが、関数は非定数のみを受け入れます。constconst cTileState &lhscTileState &lhsconst

于 2013-01-12T09:05:46.897 に答える