2015-11-12 27 views
0

包括

template <typename R, typename S, typename T> 
    T const min (R const& a, S const& b) 
    { 
     T val; 

     if(a > b) 
     { 
      val = static_cast<T>(b); 
     } 
     else 
     { 
      val = static_cast<T>(a); 
     } 
     return val; 
    } 

    // CANNOT change anything above this line -------------------- 

    void B() 
    { 
     int val =0; 

     // Only change the next line 

     val = min (5,4.2); 

     assert(val == 4); 
    } 

當代碼被編譯以下錯誤被拋出C++模板

錯誤C2783:「const的T最小(常量ř&,常量小號& )」:不能推導出模板參數的‘T’

卡住試圖解決這個..。任何幫助將不勝感激

+0

你能猜出爲什麼T不能被推斷嗎? –

回答

2

編譯器錯誤告訴你,它不能確定什麼類型的T應該在你的min調用,因爲你沒有指定它和函數的返回類型或函數模板在重載解析或模板參數推導期間不使用(當然,除非它是轉換運算符)。

由於您無法更改min(這很愚蠢)的定義,因此您唯一的選擇是在調用中明確指定T。但是,由於T是最後一個模板參數,因此您必須指定前兩個模板參數!就像這樣:

val = min<int, double, int>(5, 4.2); 
+0

感謝您的信息! – VIM

0

的編譯器,如果你不使用它不能推導出模板參數。

這就是說你會在這種情況下做什麼是在指定函數min時指定模板參數。就像這樣:

void B() 
{ 
    int val = 0; 

    // Only change the next line 

    val = min<int, double, int>(5, 4.2); 

    assert(val == 4); 
} 
+0

感謝您的信息! – VIM

+0

非常歡迎您,接受幫助SO社區的答案! –