[英]ambiguous << operator in Mongodb C++ driver document builder
我正在嘗試使用v3驅動程序來構建mongodb文檔。 我使用的是來自“ char *”指針數組的字符串,但始終收到表示<<操作符不明確的錯誤。 確切的錯誤是:
item.cpp:105:錯誤:“ operator <<”的模棱兩可的重載(操作數類型為
‘std::enable_if<true, bsoncxx::v_noabi::builder::stream::key_context<> >::type {aka bsoncxx::v_noabi::builder::stream::key_context<>}’ and ‘const char*’)
<< dbTypeString[dbType::IT_TYPE]
dbTypeString是一個字符串數組,例如:
const char * dbTypeString[] = {"string a", "string b"}
mongo代碼的簡化版本看起來像
bsoncxx::builder::stream::document doc{};
doc << dbTypeString[0] << "value string";
奇怪的是:doc <<“ string1” <<“ string2”正常工作。
有什么建議么?
這里的錯誤消息可能很難解析,但是重要的部分是ambiguous overload for 'operator<<'
和bsoncxx::v_noabi::builder::stream::key_context<>
ambiguous overload for 'operator<<'
。 對於類bsoncxx::builder::stream::key_context
(在內部處理文檔生成器的追加內容), <<
操作符已重載,並且編譯器不知道要使用哪個定義,因為存在多個可以工作。 更具體地說,沒有定義operator<<
接受const char *
參數的定義,但是存在接受std::string
和stdx::string_view
,並且const char *
可以強制為這兩種類型。
要編譯代碼,您有兩個選擇。 首先,您可以將dbTypeString
更改為包含std::string
而不是const char *
:
std::string dbTypeString[] = {"string a", "string b"}
或者,如果您希望將數組保留為當前類型,則可以手動將const char *
std::string
轉換為std::string
,從而消除了要調用的重載的歧義:
doc << static_cast<std::string>(dbTypeString[0]) << "value string";
稍微切線的是,通常使用流構建器比較棘手(尤其是關於<<
操作符的返回類型,這在過去引起了相當大的混亂)。 我個人建議盡可能使用基本構建器 ; 盡管該API的工效性稍差一些,但它並沒有流構建器那樣復雜,這意味着(在非常罕見的情況下)您會因使用不當而導致錯誤,因此可能會調試問題更直接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.