gpt4 book ai didi

c++ - MongoDB C++ 驱动程序——通过引用传递查询对象在随后使用其排序时引发错误

转载 作者:行者123 更新时间:2023-11-28 07:57:33 24 4
gpt4 key购买 nike

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))

引发错误:

错误 C2663:“mongo::Query::sort”:2 个重载没有“this”指针的合法转换。

sort (const string &field, int asc=1) 应该是适用的重载。我相信这与使用 const Query& 及其成员函数 sort 有关。但是,如果我将其更改为不带 constQuery&,那么我的参数初始化 = BSONObj() 会引发:

无法从“mongo::BSONObj”转换为“mongo::Query &”

如果我按值传递,那么它编译得很好。

有没有办法避免这两种错误(除了按值传递)?谢谢!

最佳答案

大卫豪斯 at MongoDB-user引导我完成解决方案:

使用 Query &qu = Query() 代替 const Query &qu = BSONObj()

  1. 我在使用 const 时遇到错误,“因为排序会更改查询对象的值 - 它被定义为常量。”所以我放弃了它。

  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.query 和时引发了 no legal conversion for 'this' pointer

C2662:“mongo::DBClientWithCommands::count”:无法将“this”指针从“const mongo::DBClientConnection”转换为“mongo::DBClientWithCommands &”转换丢失限定符

当使用 c.count 时。所以我保持它不合格。

关于c++ - MongoDB C++ 驱动程序——通过引用传递查询对象在随后使用其排序时引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12382530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com