1

わかりましたので、boost::bimap を次のように宣言しました。

boost::bimap<object*, position> object_list;

object と position は、それぞれクラスと構造体です。

Bimap に格納されている現在のオブジェクト内で、独自のエントリを見つけたいと考えています。

私は現在、次のようにしようとしています:

void order::do_thing() {
    ...
    position pos = object_list.left.at(this);
    ...
}

エラー出力の解析に問題がありますが、bimap の at 関数は、これの const 性および/または参照性が気に入らないようです (はい、これが右辺値であることはわかっています)。

この検索を行うための適切な/推奨される方法は何ですか?

エラーのスニペットを次に示します。

order.cpp:117:56:   required from here
/usr/include/boost/bimap/container_adaptor/associative_container_adaptor.hpp:207:56: error: no match for call to ‘(const boost::bimaps::container_adaptor::detail::key_to_base_identity<object*, object* const>) (order* const&)’
                 this->template functor<key_to_base>()(k)

(seheのコメントに対処し、問題を指摘するために編集が追加されました)

私の投稿が悪いエチケットであった場合はお詫びします。私はSOに投稿するのが初めてで、すべてのコードをダンプするだけであると仮定していました(コードのこのセクションのカスタムオブジェクトとテンプレートを含めるだけで数百行になります)悪い形と見なされるので、問題を解決するために(私が思っていた)最小限に切り詰めました.

そして、テストケースのリンクに対処するために、私はテストケースを書きます. この場合、bimap のベクトルを位置コードに追加するために交換していましたが、これは実際にはコンパイルに失敗しました (スタック トレースではなく、コンパイル エラーであることを明確に述べていませんでしたが)。私はあなた (sehe) を想定していますが、ランタイム エラーについて話していると思っていました。

とにかく、エラーを再現するためにコードを実際の最小値までトリミングしていたので、ここに投稿して実際の問題に気付きました。上記のように、bimap は値<object*, position>を保持しますが、bimap に自分自身を挿入しようとしているクラスは順序クラスです: voidorder::do_thing() {

したがって、単純なタイプのエラーであることが判明しました。みなさん、本当にくだらない質問をしてすみません。午前 3 時にプロジェクトに取り組むことで得られるものだと思います。

4

1 に答える 1