错误:无法将int **转换为int *(模板,动态分配数组)

时间:2016-02-08 17:19:20

标签: c++ oop

我编写了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");
}

1 个答案:

答案 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";
    }
}