c++模板类与模板函数的特化有关问题
c++模板类与模板函数的特化问题
我在.h文件里声明和定义了模板类:
我在.cpp文件调用来测试模板类和函数:
编译器编译时提示: 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)'
,如果我没有特化模板类运行测试都没问题,我模板类特化哪里出错,望指出,谢谢
------解决方案--------------------
特化的时候去掉:
template <>
template <typename char*>
我在.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)'
,如果我没有特化模板类运行测试都没问题,我模板类特化哪里出错,望指出,谢谢
------解决方案--------------------
特化的时候去掉:
template <>
template <typename char*>