0

Windows 7 64 SP1 -- MongoDB 2.2.0-rc2 -- Boost 1.42 -- MS VS 2010 Ultimate -- C++ ドライバー

私はこの関数を書きました:

void printQuery(DBClientConnection &c, std::string &dc, const Query &qu = BSONObj(), std::string sortby = "" )

このフラグメント:

auto_ptr<DBClientCursor> cursor;
cursor = c.query(dc,qu.sort(sortby))

エラーが発生します:

error C2663: 'mongo::Query::sort' : 2 overloads have no legal conversion for 'this' pointer.

sort (const string &field, int asc=1)適用可能なオーバーロードである必要があります。const Query&これは、メンバー関数を使用することと関係があると思いますsort。しかし、それをQuery&なしに変更するとconst、パラメーターの初期化で次のように発生し= BSONObj()ます。

cannot convert from 'mongo::BSONObj' to 'mongo::Query &'

値で渡すと、正常にコンパイルされます。

エラーのいずれかを回避する方法はありますか (値渡し以外)? ありがとう!

4

2 に答える 2

1

MongoDBのDavidHows-ユーザーがソリューションを案内してくれました。

の代わりにconst Query &qu = BSONObj()、を使用しますQuery &qu = Query()

  1. const「sortはクエリオブジェクトの値を変更するため、定数として定義されているため」を使用してエラーが発生していました。だから私はそれを落としました。

  2. BSONObj()をデフォルトとして使用すると、「新しいオブジェクトを作成するのではなく、新しいBSONObjをQueryオブジェクトの変数に割り当てるので、新しいものは作成されないため、コンストラクターの呼び出しはありません」という問題があります。

そこで、代わりにQuery()を使用しました。if ( qu.obj == BSONObj() )quが空かどうかをテストするために機能します。

私の最後の機能は次のとおりです。

void printQuery(DBClientConnection &c, const string &dc, Query &qu = Query(), const string &sortby = "" )

DBClientConnectionとして資格を得ることができませんでしたconst。c.queryno legal conversion for 'this' pointerを使用すると

C2662: 'mongo::DBClientWithCommands::count' : cannot convert 'this' pointer from 'const mongo::DBClientConnection' to 'mongo::DBClientWithCommands &' Conversion loses qualifiers

c.countを使用する場合。だから私はそれを無資格のままにしました。

于 2012-09-13T07:04:20.897 に答える
0

ではなく、カーソルをソートする必要がありquます。これは、BSONクエリであると推測されます。例えば。

auto_ptr<DBClientCursor> cursor;
cursor = c.query(dc,qu).sort(sortby)

詳細については、 http://www.mongodb.org/pages/viewpage.action?pageId=133415#C%2B%2BTutorial-Sortingをご覧ください。

于 2012-09-12T18:38:44.513 に答える