急急急!在线等大神!!有关函数模板的问题求教了!谢谢~~~~~~
include<iostream>
using namespace std;
template <class T>
T maxn(const T* a,const int n);
template<>const char* maxn<char*>(const char* p[],int n);//这里出错!!!!!
int main()
{
int a[6]={1,2,4,2,5,3};
double b[4]={1.2,3.3,5.3,1.2};
char* p[5]={"abc","abcd","abcd","abc","abcde"};
cout<<"模板参数为int时:";
maxn(a,6);
cout<<endl;
cout<<"模板参数为double时:";
maxn(b,4);
cout<<endl;
cout<<"模板参数为char*时:";
maxn(p,5);
cout<<endl;
return 0;
}
template <class T>
T maxn(const T* a,const int n)
{
T m=a[0];
for (int i=1;i<n;i++)
m=m>a[i]?m:a[i];
return m;
}
template<>const char* maxn<char*>(const char* p[],int n)
{
int m=strlen(p[0]);
for (int i=1;i<n;i++)
m=m>strlen(p[i])?m:strlen(p[i]);
for (int i=0;i<n;i++)
if (strlen(p[i])==m)
return p[i];
}
error C2912: explicit specialization; 'const char *__cdecl maxn(const char *[],int)' is not a function template
怎么回事,急啊~~~!!!!!!!!!!! C++ 函数模板 显示具体化
[解决办法]
maxn已经是模版函数了,另一个完全多余且不符合C++语法:
#include<iostream>
using namespace std;
template <class T>
T maxn(const T* a,const int n);
int main()
{
int a[6]={1,2,4,2,5,3};
double b[4]={1.2,3.3,5.3,1.2};
char* p[5]={"abc","abcd","abcd","abc","abcde"};
cout<<"模板参数为int时:";
maxn(a,6);
cout<<endl;
cout<<"模板参数为double时:";
maxn(b,4);
cout<<endl;
cout<<"模板参数为char*时:";
maxn(p,5);
cout<<endl;
return 0;
}
template <class T>
T maxn(const T* a,const int n)
{
T m=a[0];
for (int i=1;i<n;i++)
m=m>a[i]?m:a[i];
return m;
}
#include<iostream>
using namespace std;
template <class T>
T maxn(const T* a,const int n);
const char* maxn (const char* p[],int n);//这里出错!!!!!
int main()
{
int a[6]={1,2,4,2,5,3};
double b[4]={1.2,3.3,5.3,1.2};
char const* p[5]={"abc","abcd","abcd","abc","abcde"};
cout<<"模板参数为int时:";
maxn(a,6);
cout<<endl;
cout<<"模板参数为double时:";
maxn(b,4);
cout<<endl;
cout<<"模板参数为char*时:";
maxn(p,5);
cout<<endl;
return 0;
}
template <class T>
T maxn(const T* a,const int n)
{
T m=a[0];
for (int i=1;i<n;i++)
m=m>a[i]?m:a[i];
return m;
}
const char* maxn (const char* p[],int n)
{
size_t m=strlen(p[0]);
for (int i=1;i<n;i++)
m=m>strlen(p[i])?m:strlen(p[i]);
for (int i=0;i<n;i++)
if (strlen(p[i])==m)
return p[i];
return "";
}