2016-05-13 2 views
0

При попытке работать через official MongoDB C++ tutorial я столкнулся с ошибкой, которую я не понимаю. Следующий код вытягивается прямо с сайта:Типы BSON и std :: chrono

#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 и тем, что я ему предоставлял. Я также попробовал подавать его chrono::system_clock::time_point с таким же номером, за MongoDB C++11 Driver docs, но у меня все еще есть несоответствие.

Итак ... Я не уверен, почему материал учебника не работает для меня, и я не полностью понимаю списки инициализаторов ввода текста, шаблонов или скобок для C++. И пока я был бы рад пройти учебное пособие, посвященное той проблеме, с которой я столкнулся, я даже не уверен, что для Google. Значительные пробелы слишком широки. = P

Следовательно, любая помощь будет принята с благодарностью. =)

ответ

1

Что-то вроде

bsoncxx::types::b_date { std::chrono::system_clock::time_point { 
    std::chrono::milliseconds { 12323 } } } 

или

bsoncxx::types::b_date { std::chrono::system_clock::now() + 
    std::chrono::milliseconds { 12323 } } 

следует надеяться работать. (Первый будет относиться к эпохе системных часов, что, вероятно, относится к эпохе Unix 1 января 1970 года 00:00:00 UTC в системах Linux.)

+0

Ну, это сработало! Но теперь программа выдает исключение при попытке подключения к базе данных. Прекрасно ... Надеюсь, я смогу вернуться к драйверу C для функциональных обучающих программ. – musasabi

Смежные вопросы