我在最近要做的編程作業里看到有大佬沒有定義stringToNum直接呼叫沒有報錯,但在我這里就一直報錯“未定義識別符號”,上網查了定義方式加進去但沒有任何效果,想問問這種情況怎么解決呀?
template < class Type >
Type CurveDataModel::stringToNum(const std::string& str)
{
std::istringstream iss(str);
Type num;
iss >> num;
return num;
}
X = stringToNum<double>(x_string);
Y = stringToNum<double>(y_string);
Z = stringToNum<double>(z_string);
numberPrecision = max(numberPrecision, max(getNumberPrecision(x_string),
max(getNumberPrecision(y_string), getNumberPrecision(z_string))));
這是代碼的一小部分,有好幾處錯,要崩潰了!
uj5u.com熱心網友回復:
神奇的是X = stringToNum<double>(x_string),
Y = stringToNum<double>(y_string),
Z = stringToNum<double>(z_string);
改成這樣就不報錯了!簡直是玄學......
uj5u.com熱心網友回復:
根本不是什么玄學,模板函式本來如此,因為模板函式不是一個函式,而是一個模板,只有根據具體的模板引數才能確定具體的函式
例如
template<typename T>
T max(T a,T b);
那么max<int>(..) 和 max<double>(...)其實 是兩個函式
如果你指定了a,b的型別,可以推匯出T
你可以直接max(a,b),如果無法推導,則必須指定模板引數型別
呼叫將是這樣
max<int>(a,b);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/94413.html
標籤:C++ 語言
