2

私の人生では、このコードを機能させることはできません。XNA フレームワークの廃止に伴い、コードを C# から C++ に変換しようとしていますが、頑固なメソッドを変換したくありません。C# では次のようになります。

public Tile GetTileAtPosition(bool screenOrGame, Vector2 position)
    {

        if (screenOrGame)
        {
            return Array.Find(tileList, tile => tile.Position == position / 24);
        }
        else
        {
            return Array.Find(tileList, tile => tile.Position == position);
        }
    }

C++ では、これの代わりに使用しようとしているコードは次のとおりです。

Tile Level::GetTileAtPosition(bool screenOrGame, sf::Vector2f position)
{
    vector<Tile>::iterator it;

    if (screenOrGame)
    {

        it = find(tileList.begin(), tileList.end(), [position](const Tile &t) { return t.GetPosition() == sf::Vector2f(position.x / 24, position.y / 24); });
        return Tile(it->GetID(), it->GetPosition().x, it->GetPosition().y);

    }

    else
    {

        it = find(tileList.begin(), tileList.end(), [position](const Tile& t) { return t.GetPosition() == position; });
        return Tile(it->GetID(), it->GetPosition().x, it->GetPosition().y);

    }

}

C++ の代入行 (it = ...) で、原因や解決策を特定できない骨の折れるエラーが表示されます。戻り値:

error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const Blobby::Level::GetTileAtPosition::<lambda_29eb981cd341d9c05d39c4654bc470b9>' (or there is no acceptable conversion)    c:\program files (x86)\microsoft visual studio 11.0\vc\include\xutility 3186

このエラーを修正する方法、または C++ でメソッドを実装するためのより良い/より実用的な方法はありますか?

4

1 に答える 1

14

C++ では、コンパレーターを使用するバージョンには接尾辞 が付くことがあります_if。の場合ですstd::findstd::find検索する要素を受け取りますが、std::find_if同等性を実装するコンパレーターを受け取ります。Tileこのエラーは、ラムダに相当するa の一致が見つからなかったことを意味します。

于 2013-05-28T02:32:29.177 に答える