[英]cannot convert from 'const char *' to 'char *' for std::string::c_str
這給出了錯誤:無法從'const char *'轉換為'char *'。
class Mock
{
public:
...
static void func(char **result)
{
*result = (resultsI++)->c_str();
}
static std::vector<std::string> results;
static std::vector<std::string>::iterator resultsI;
};
std::vector<std::string> Mock::results;
std::vector<std::string>::iterator Mock::resultsI;
如何在不更改函數func的接口的情況下有效地消除此錯誤? 該接口的實現者:
void (func*)(char **result)
忘了在簽名中使用const char **。 我無法改變它。
記住這是一個模擬,我只在我的單元測試中使用。
嘗試:
*result = &(*resultsI++)[0];
雖然這不能保證在C ++ 11之前工作,但是在大多數或所有當前編譯器上都可以正常工作。
危險的是,如果函數試圖改變字符串的長度,你可能會得到一些討厭的錯誤。 更改個別字符應該沒問題。
在測試代碼中,如果您確定接口的用戶不會改變char *,那么您可以使用const_cast
嗎?
假設調用者不接受char *
所有權; 如果是這種情況,那么你應該復制一份。
如果您完全確定接口函數不會修改字符串,則可以使用
*result = const_cast<char *>((resultsI++)->c_str());
刪除const
。
否則,另一個選擇是從使用std::vector<std::string>
切換到std::vector<std::vector<char>>
但是你必須確保正確地null終止字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.