首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急大神!有关函数模板的有关问题求教了!多谢~

2013-03-10 
急急急!在线等大神!!有关函数模板的问题求教了!谢谢~~~~~~includeiostreamusing namespace stdtemplate

急急急!在线等大神!!有关函数模板的问题求教了!谢谢~~~~~~
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 "";
 }

热点排行