声明类模板并调用相应模版类的静态函数时出错,求助。
代码稍微有点长,请各位耐心看完
用的是VS2012写的
//Main_.cpp
#include<iostream>
#include<cstddef>
#include"简单选择排序.h"
using namespace std;
using sing::SimpleSort;
int main(void)
{
int arrList[5]={1,3,4,2,2};
SimpleSort<int>::Sort(arrList,0,5,'<');
for(size_t i=0;i<5;++i)
cout<<arrList[i]<<" ";
cout<<endl;
cin.get();
cin.get();
return(0);
}
//简单选择排序.h
//在Sort函数的第19行出错
#ifndef SIMPLESORT_H_INCLUDE_
#define SIMPLESORT_H_INCLUDE_
#include<cstddef>
namespace sing
{
template<typename T0>
class SimpleSort
{
public:
SimpleSort();
~SimpleSort();
static void Sort(T0 tArray[],const size_t startIndex,const size_t endIndex,char mode='<');
private:
static size_t Select(const T0 tArray[],size_t begin,size_t end,char mode='<');
static void Swap(T0& var0,T0& var1);
};
//构造
template<typename T0>
SimpleSort<T0>::SimpleSort(){}
//析构
template<typename T0>
SimpleSort<T0>::~SimpleSort(){}
//接口函数
template<typename T0>
void SimpleSort<T0>::Sort(T0 tArray[],const size_t startIndex,const size_t endIndex,char mode)
{
size_t index=startIndex;
for(size_t i=startIndex;i<endIndex;++i)
{
//返回从tArray数组中以mode排序方式从 i到size-1第一个符合条件的下标
index=SimpleSort<T0>::Select(tArray,i,endIndex-1,mode);
//交换两个变量的值
if(i!=index)
{
/*T0 tmp=T0[i];
T0[i]=T0[index];
T0[index]=tmp;*/
//注释掉这句,换成上面的语句一样报错
//换成Swap(T0[i],T0[index]);也一样报错
//报错类型为 将T0类型用作表达式非法 ?
SimpleSort<T0>::Swap(T0[i],T0[index]);
}
}
}
//在tArray数组中选择从begin到end中第一个符合mode条件的元素的下标返回
template<typename T0>
size_t SimpleSort<T0>::Select(const T0 tArray[],size_t begin,size_t end,char mode)
{
size_t index=begin;
T0 tmp=tArray[begin];
if(mode=='<')
{
for(++begin;begin<end;++begin)
{
if(tmp>tArray[begin])
{
index=begin;
tmp=tArray[begin];
}
}
}else
{
for(++begin;begin<end;++begin)
{
if(tmp<tArray[begin])
{
index=begin;
tmp=tArray[begin];
}
}
}
return index;
}
//交换两个元素
template<typename T0>
void SimpleSort<T0>::Swap(T0& var0,T0& var1)
{
T0 tmp;
tmp=var0;
var0=var1;
var1=tmp;
}
}
#endif