关于cpp的模板问题
#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
class array {
public:
array(int i);
~array();
bool cmp(const T& a,const T& b);
void my_sort();
float my_rand() { return rand()*0.001 ;}
int size;
void put();
private:
T* a;
};
template <class T>
void array<T>::put(){
for (int i=0;i<size;i++){
cout<<a[i]<<endl;
}
}
template <class T>
array<T>::array(int s){
a=new T[size=s];
for (int i=0;i<size;i++){
a[i]=static_cast<T>(my_rand());
}
//generate(a.begin(),a.end(),static_cast<T>(my_rand));
}
template <class T>
array<T>::~array(){
delete [] a;
}
template <class T>
bool array<T>::cmp(const T& a,const T& b){
return a<b;
}
template <class T>
void array<T>::my_sort(){
sort(a,a+size,cmp());
}
int main()
{
array<int> a(5);
a.my_sort();
a.put();
return 0;
}
显示错误,就是在my_sor()的cmp中????
对‘sort(int*&, int*, <未解决的重载函数类型>)’的调用没有匹配的函数
[解决办法]
sort(a,a+size,cmp<T>());
[解决办法]
你的cmp()函数定义是有参数的,但你这句调用
sort(a,a+size,cmp());
没有给带上参数啊
[解决办法]
模板类中的cmp函数前面加上static修饰符,sort类型的这种回调函数,要求的是全局地址函数。
[解决办法]
cmp不应该是成员函数!
#include <iostream>
#include <algorithm>
using namespace std;
template <class T>
class array {
public:
array(int i);
~array();
// FIXIT: bool cmp(const T& a,const T& b);
void my_sort();
float my_rand() { return rand()*0.001 ;}
int size;
void put();
private:
T* a;
};
template <class T>
void array<T>::put(){
for (int i=0;i<size;i++){
cout<<a[i]<<endl;
}
}
template <class T>
array<T>::array(int s){
a=new T[size=s];
for (int i=0;i<size;i++){
a[i]=static_cast<T>(my_rand());
}
//generate(a.begin(),a.end(),static_cast<T>(my_rand));
}
template <class T>
array<T>::~array(){
delete [] a;
}
template <class T>
bool /* FIXIT: array<T>:: */cmp(const T& a,const T& b){
return a<b;
}
template <class T>
void array<T>::my_sort(){
sort(a,a+size,cmp<T>/* FIXIT: () */);
}
int main()
{
array<int> a(5);
a.my_sort();
a.put();
return 0;
}