簡體   English   中英

Mongodb C ++驅動程序文檔生成器中的不明確<<操作符

[英]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::stringstdx::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM