在尝试完成官方 MongoDB C++ 教程时,我遇到了一个我不理解的错误。以下代码直接从他们的网站上提取:
#include <chrono>
#include <bsoncxx/builder/stream/document.hpp>
#include <bsoncxx/types.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/uri.hpp>
using bsoncxx::builder::stream::document;
using bsoncxx::builder::stream::open_document;
using bsoncxx::builder::stream::close_document;
using bsoncxx::builder::stream::open_array;
using bsoncxx::builder::stream::close_array;
using bsoncxx::builder::stream::finalize;
int main()
{
//...
bsoncxx::document::value restaurant_doc = document{}
<< "address" << open_document << "street"
//...
<< bsoncxx::types::b_date{std::chrono::milliseconds{12323}}
//...
<< "restaurant_id" << "41704620"
<< finalize;
我从 GCC (v6.1.1) 得到的错误看起来像:
insert.cpp: In function ‘int main()’:
insert.cpp:36:65: error: no matching function for call to ‘bsoncxx::v_noabi::types::b_date::b_date(<brace-enclosed initializer list>)’
<< bsoncxx::types::b_date{std::chrono::milliseconds{12323}}
In file included from /usr/include/bsoncxx/v_noabi/bsoncxx/builder/core.hpp:26:0,
from /usr/include/bsoncxx/v_noabi/bsoncxx/builder/stream/document.hpp:17,
from insert.cpp:3:
/usr/include/bsoncxx/v_noabi/bsoncxx/types.hpp:306:14: note: candidate: bsoncxx::v_noabi::types::b_date::b_date(const time_point&)
explicit b_date(const std::chrono::system_clock::time_point& tp)
^~~~~~
我尝试用括号而不是大括号来初始化chrono::milliseconds
,但是 GCC 只是更清楚地抱怨可用bsoncxx::types::b_date
构造函数与我提供的构造函数之间的类型不匹配。根据MongoDB C++11 Driver docs ,我还尝试chrono::system_clock::time_point
用相同的数字对其进行初始化,但仍然不匹配。
所以......我不确定为什么教程材料对我不起作用,我也不完全理解 C++ 的类型、模板或大括号初始化列表。虽然我很乐意阅读针对我遇到的问题的教程,但我什至不确定谷歌的目的是什么。知识差距太大了。=P
因此,任何帮助将不胜感激。=)