我编写了3个模板函数,但是当我运行代码时,它会在第一个函数的主体上给出错误,其中动态分配了arr的内存。以下是代码,请帮我找到我错过的内容。感谢
错误:错误1错误C2440:'=':无法从'int **'转换为'int *'
#include<iostream>
using namespace std;
template<typename T>
void input(T arr, int size){
arr = new T[size];
for(int i=0; i<size; i++){
cout<<"\nEnter: ";
cin>>arr[i];
}
}
template<typename T>
void sort(T arr, int size){
int temp;
for(int j=0; j<size-1; j++){
for(int i=0; i<size-1; i++){
if(arr[i]>arr[i+1]){
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
template<typename T>
void display(T arr, int size){
cout<<"\nAfter Sorting: "<<endl;
for(int i=0; i<size; i++){
cout<<arr[i]<<"\t";
}
}
int main(){
int* x=NULL;
int size;
cout<<"Enter the number of elements: ";
cin>>size;
cout<<"\nEnter integer values:";
input<int*>(x, size);
// sort(x, size);
display<int*>(x, size);
/***
cout<<"\nEnter floating values:";
input(x, size);
sort(x, size);
display(x, size);
cout<<"\nEnter character values:";
input(x, size);
sort(x, size);
display(x, size);
*/
system("pause");
}
答案 0 :(得分:2)
你有一个错误:
arr = new T[size];
使用您的参数,它意味着:
int *arr = new int*[size];
new int*[size]
的类型不是int*
您可以执行以下操作:
template<typename T>
void input(T * &arr, int size){//
arr = new T[size];
for(int i=0; i<size; i++){
cout<<"\nEnter: ";
cin>>arr[i];
}
}
主要是:
input<int>(x, size); //
// sort(x, size);
display<int>(x, size);
并在显示中:
template<typename T>
void display(T *arr, int size){
cout<<"\nAfter Sorting: "<<endl;
for(int i=0; i<size; i++){
cout<<arr[i]<<"\t";
}
}