[英]Syntax error with template in c++
I have following code: 我有以下代码:
#include <iostream>
using namespace std;
template<class T>
T max(T *data,int len){
int i;
T Max=data[0];
for (int i=1;i<len;i++){
if (data[i]>max){
Max=data[i];
}
}
return Max;
}
int mai(){
int i[]={12,34,10,9,56,78,30};
int len=sizeof(i)/sizeof(i[0]);
cout<<max(i,len)<<"\n";
return 0;
}
But when I compile it, I get the following errors: 但是当我编译它时,出现以下错误:
generic_max, Configuration: Debug Win32 ------
1>Build started 7/29/2010 1:03:25 AM.
1>InitializeBuildStatus:
1> Touching "Debug\generic_max.unsuccessfulbuild".
1>ClCompile:
1> generic_max.cpp
1>c:\users\david\documents\visual studio 2010\projects\generic_max\generic_max\generic_max.cpp(10): error C2563: mismatch in formal parameter list
1> c:\users\david\documents\visual studio 2010\projects\generic_max\generic_max\generic_max.cpp(22) : see reference to function template instantiation 'T max<int>(T *,int)' being compiled
1> with
1> [
1> T=int
1> ]
1>c:\users\david\documents\visual studio 2010\projects\generic_max\generic_max\generic_max.cpp(10): error C2568: '>' : unable to resolve function overload
1> c:\users\david\documents\visual studio 2010\projects\generic_max\generic_max\generic_max.cpp(4): could be 'T max(T *,int)'
1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(2086): or 'const _Ty &std::max(const _Ty &,const _Ty &,_Pr)'
1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(2078): or 'const _Ty &std::max(const _Ty &,const _Ty &)'
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.95
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Please help me to fix this problem. 请帮助我解决此问题。
C++ is case-sensitive. C ++区分大小写。
#include <iostream>
// Note the omission of `using namespace std;`. The declaration can
// introduce clashes if one of your functions happen to have the same name
// as the functions in the std namespace.
template<class T>
T max(T *data,int len) {
//int i; <-- Not needed? The for loop already has an `i` declared in it.
T Max=data[0];
for (int i=1;i<len;i++) {
/****** Note `Max`, not `max` ******/
// The typo in your code snippet is what's causing the C2563.
// `max` (in this context) refers to the function
// `template<class T> T max(T *data,int len)` that has been declared.
// `Max` refers to the variable declared in this function.
// (For the sake of readability, variable names should not similar
// to the function name).
if (data[i]>Max) {
Max=data[i];
}
}
return Max;
}
/****** Note `main()`, not `mai()` ******/
int main() {
int i[]={12,34,10,9,56,78,30};
int len=sizeof(i)/sizeof(i[0]);
// `cout` should be just qualified with `std::` instead of
// `using namespace std`.
std::cout<<max(i,len)<<"\n";
return 0;
}
Your max
function is conflicting with the standard C++ function std::max
because you have written using namespace std
at the top of your program, which brings everything in the std
namespace into the default namespace. 您的max
函数与标准C ++函数std::max
冲突,因为您在程序顶部using namespace std
编写了代码,这将std
名称空间中的所有内容都带入默认名称空间。 The compiler can't tell if you wanted to call your max
or some version of std::max
. 编译器无法告诉您是否要调用max
或某些版本的std::max
。
Either change the name of your function, or remove using namespace std
and explicitly prefix things in your program in the std
namespace with std::
. 更改函数的名称,或using namespace std
删除,并在程序中将std
名称空间中的内容显式添加为std::
前缀。
如果(data [i]> max)-将max更改为Max
在第10行中,您可能表示>Max
而不是>max
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.