2017-08-26 60 views
0
#include <iostream> 
using namespace std; 

template<int x, int y> 
void add() 
{ 
    cin >> x >> y; 
    cout << x + y << endl; 
} 

int main() 
{ 
    add<1,2>(); 

    return 0; 
} 

在Windows10 +視覺工作室2017,它得到一個錯誤:二進制>>:在STD的左操作數的運算符::istream的類型沒有找到(或沒有可接受的轉化率)模板函數爲什麼不能添加「cin」?

的參數xy有別於其他正常的int變量?

+0

如果您在沒有模板的情況下嘗試此操作,您將得到相同的錯誤。一些谷歌食物給你:「運營商優先權」。 –

+0

@SamVarshavchik:你的意思是用常規函數參數替換模板參數?不,在這種情況下不會有錯誤(儘管參數會毫無意義,因爲函數會立即寫入它們)。 –

+0

如果出現錯誤,請在您的問題中輸入錯誤消息。 –

回答

0

是的,模板參數與正常功能參數不同。模板參數是編譯時間常量。鑑於你的add模板,當你與add<1,2>實例化它的定義,基本上編譯生成這樣的功能:

// where 'function_name' is a compiler generated name which is 
// unique for the instantiation add<1,2> 
void function_name() 
{ 
    cin >> 1 >> 2; 
    cout << 1 + 2 << endl; 
} 

顯然,你不能做到這一點:

cin >> 1 >> 2; 

你需要實際可輸入的可修改對象,而不是常量。

0

我想你想要更多的東西是這樣的:

#include <iostream> 
using namespace std; 

template<class T> 
void add(T x, T y) 
{ 
    cin >> x >> y; 
    cout << x + y << endl; 
} 

int main() 
{ 
    add(1, 2); 

    return 0; 
} 

在你的榜樣,xy是模板參數,但你想使用它們作爲你cincout報表值。

相關問題