c++模板类与模板函数的特化问题

KT永恒国度 2014-08-01 08:12:12
我在.h文件里声明和定义了模板类:

using namespace std;
template <typename T>
class Test
{
private:
T max;
T address;
public:
T maxn(T arr[],int i);
};

template <typename T>
T Test<typename T>::maxn(T arr[],int i)
{
for(int j=0;j<i;j++)
{
arr[j]>arr[j+1]?max=arr[j]:max=arr[j+1];
}
cout<<max<<"ok";
return max;
}

//类的特化
template <>
class Test<char*>
{
private:
char* max;
char* address;
public:
char* maxn(char* arr[],int i);

};

template <typename char*>
char* Test<typename char*>::maxn(char* arr[],int i)
{
for(int j=0;j<i;j++)
{
(*arr[j]).size>(*arr[j+1]).size?adress=arr[j]:address=arr[j+1];
}
cout<<address<<"it is ok";
return address;
};

我在.cpp文件调用来测试模板类和函数:

int arr[6]={1,2,3,4,5,6};
double arr1[4]={6,7,8,9};
char *arr2[5]={"asd","asdf","asdsaf","asdgsdggfhfdh","sdafgahdsfsdljg"};
Test <int> t1;
t1.maxn(arr,6);
Test <double> t2;
t2.maxn(arr1,4);
Test<char*> t3;
t3.maxn(arr2,5);
system("pause");

编译器编译时提示: error C2244: “Test<char*>::maxn”: 无法将函数定义与现有的声明匹配
e:\c++\003\003\806.h(36) : 参见“Test<char*>::maxn”的声明
1> 定义
1> 'char *Test<char*>::maxn(char *[],int)'
1> 现有声明
1> 'char *Test<char*>::maxn(char *[],int)'
,如果我没有特化模板类运行测试都没问题,我模板类特化哪里出错,望指出,谢谢
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KT永恒国度 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 gzliudan 的回复:
特化的时候去掉: template <> template <typename char*>
\c++\003\003\806.h(30): error C2906: “Test<char*>”: 显式专用化需要“template <>” 1>e:\c++\003\003\806.h(39): error C2027: 使用了未定义类型“Test<char*>” 1>e:\c++\003\003\806.h(43): error C2228: “.size”的左边必须有类/结构/联合 1> 类型是“char” 1>e:\c++\003\003\806.h(43): error C2228: “.size”的左边必须有类/结构/联合 1> 类型是“char” 1>e:\c++\003\003\806.h(43): error C2065: “adress”: 未声明的标识符 1>e:\c++\003\003\806.h(43): error C2065: “address”: 未声明的标识符 1>e:\c++\003\003\806.h(45): error C2065: “address”: 未声明的标识符 1>e:\c++\003\003\806.h(46): error C2065: “address”: 未声明的标识符 1>e:\c++\003\003\main.cpp(64): error C2079: “t3”使用未定义的 class“Test<char*>” 1>e:\c++\003\003\main.cpp(65): error C2228: “.maxn”的左边必须有类/结构/联合 1> 类型是“int” 1>生成失败。 1> 1>已用时间 00:00:02.23 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
gzliudan 2014-08-01
  • 打赏
  • 举报
回复
特化的时候去掉: template <> template <typename char*>
KT永恒国度 2014-08-01
  • 打赏
  • 举报
回复
引用 3 楼 dataxdata 的回复:
是什么编译器?
vs2010
dataxdata 2014-08-01
  • 打赏
  • 举报
回复
是什么编译器?

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧