2017-08-26 136 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报表值。

相关问题