我跑的這兩行代碼添加到地圖以後:代碼檢測字符串和常量字符陣列
o.add("-i", 800, "int option");
o.add("-w", "'switch on' option (no third parameter)");
要添加他們我在使用兩個附加的功能定義爲:
template<class T>
void add(std::string name, T value, std::string desc);
template<class T>
void add(std::string name, std::string desc);
第一個正常工作,並返回我想要的值,但如果我添加第二個,我得到的錯誤:
error: no matching function for call to ‘Opt::add(const char [3], const char [40])’
我闕這就是爲什麼它正確地使用我的字符串,而我的字符串被認爲是const char數組。
預先感謝您。
非常感謝,由於某種原因,我以爲我後來在我的功能中使用T,但事實證明我不是。爲了教育的緣故,爲什麼會導致我的字符串被檢測爲char數組? – Classtronaut
因爲他們*是* char數組。編譯器看到兩個'add'重載,一個帶有三個參數,另一個帶有非自動推導的模板參數。由於調用與任何一個重載都不匹配,因此它向您顯示了您嘗試調用該函數的實際類型。在C++中,與C#和Java不同,字符串文字具有char數組類型,而不是std :: string類型,儘管它們可以自動轉換爲std :: string,因爲std :: string有一個非顯式構造函數,它需要一個char陣列。 – user1610015
@Classtronaut,是的,它顯示你傳入的類型。它仍然可以轉換爲不同的類型,就像第一個例子中發生的那樣。 – chris