2010-10-14 52 views
0

相关部分:模板函数类型在.h文件中的C++

template<class T, class W> 
T inputValidate(T input, W minVal, W maxVal); 
.cpp文件的

相关部分:

T inputValidate(T input, W minVal, W maxVal) 
{ 
    if (input < minVal || input > maxVal) 
    { 
    cout << "Invalid input! Try again: "; 
    cin input; 
    } 

return input; 
} 

我得到的“错误的错误:“ T'没有指定类型“

+6

有一个很好的机会,你的下一个问题将是沿东西线“为什么我得到一个未定义的引用错误,当我有这个头,并尝试使用该另一个源文件中的模板?“为了抢先回答这个问题,[你几乎总是需要将模板的定义放在头文件中。](http://www.parashift.com/c++-faq-lite/templates.html#faq-35.12)。 – 2010-10-14 00:06:49

+1

@詹姆斯:你叫它,虽然它表现为对一个答案的评论,而不是一个新问题。 – 2010-10-14 00:31:03

回答

3

您需要在函数定义之前重复模板声明:

template<class T, class W> 
T inputValidate(T input, W minVal, W maxVal) 
{ 
    ... 
} 
+0

现在我得到:undefined引用'short inputValidate (short,int,int)' – user450632 2010-10-14 00:20:31

+0

阅读James对您的问题的评论 – 2010-10-14 00:30:24

+0

我不确定James'Link说什么。我不明白我该怎么做。 – user450632 2010-10-14 00:36:30

1

您必须定义功能:

template <class T, class W> T inputValidate(T input, W minVal, W maxVal) { 

} 
+1

林不知道詹姆斯的链接说什么。我不明白我该怎么做。 – user450632 2010-10-14 00:36:02

+0

@ user450632:还有其他文件,包括使用#include“validate.h”或类似内容的上述头文件。相反,只需使用#include“validate.cpp”即可。 – Anand 2010-10-14 00:54:39