Windows 7 64 SP1 - MongoDB 2.2.0-rc2 - 提升1.42 - MS VS 2010旗舰版 - 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 &'
如果我通过值,那么编译就好了。
有没有办法避免任何一个错误(除了传递值)? 谢谢!
答案 0 :(得分:1)
David Hows at MongoDB-user引导我完成解决方案:
而不是const Query &qu = BSONObj()
,请使用Query &qu = Query()
。
我使用const
收到错误,因为sort会更改查询对象的值 - 定义为常量。“所以我放弃了它。
使用BSONObj()作为默认值是有问题的,因为我不是“创建一个新对象,而是将一个新的BSONObj分配给一个Query对象的变量,所以没有创建任何新的,因此没有构造函数调用。”
所以我使用了Query()代替。如果qu为空,if ( qu.obj == BSONObj() )
可用于测试。
我的最终功能是:
void printQuery(DBClientConnection &c, const string &dc, Query &qu = Query(), const string &sortby = "" )
我无法将DBClientConnection
限定为const
。当使用c.query和
no 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时。所以我保持不合格。
答案 1 :(得分: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了解详情。