0

私は次のようなものを書きました:

bsoncxx::document::value filter_document =  document{}
      << "_id" << bsoncxx::oid  { strJobID }
      << finalize;
auto retVal = collTasks.find_one(
      filter_document, mongocxx::options::find {});

結果:

../src/CMongo.cpp:371:73: 
error: cannot bind 
‘bsoncxx::v_noabi::document::value’ lvalue to
‘bsoncxx::v_noabi::document::value&&’
       auto retVal = collTasks.find_one(filter_document, MyFindOptions);

例のように見えます。引数の型は viwe_or_value です...

4

1 に答える 1

0

データを表すには、所有型と非所有型があります。

  • 所有型です

  • 非所有型表示

所有する型がスコープ {...} を解放する場合は、基になるデータ バッファーを破棄します。値から生成されたビューは、データ バッファーを破棄できません。しかし、それはそれに依存します。ビューは値のデータバッファを参照しています。したがって、ビューが有効であるが値が無効である場合、これにより SIGSEG セグメンテーション違反が発生することがあります。もう存在しないデータにアクセスしようとしているからです。

生成された ID を fint_one() 関数で破壊したくありません。これが、この関数が値を受け入れない理由です。ところで: && は移動演算子です。オブジェクトはコピーではなく、切り取りと貼り付けです。その後、ソースにはこれがありません。

したがって、次のことを試してみてください。うまくいくはずです;)。

docJobReturned = collTasks.find_one( filter_document.view(), mongocxx::options::find {});

于 2016-05-26T09:18:53.923 に答える