#include <iostream>
using namespace std;
template <class T>
T sortArray(T data[])
{
int arrsize = sizeof(data)/sizeof(T);
int x,y,temp;
for(y=0;y<arrsize;y++)
{
for(x =0;x<arrsize-y-1;x++)
{
if(data[x]>data[x+1])
{
temp = data[x];
data[x] = data[x+1];
data[x+1] = temp;
}
}
}
return data;
}
int main()
{
int x;
int arr[] = {10,7,32,65,12,6};
int sorted[] = sortArray(arr[]);
for(x=0;x<6;x++)
{
cout<<sorted[x]<<endl;
}
}
当我尝试排序编译此代码时,我收到错误
**abc\main.cpp:34: error: expected primary-expression before ']' token
int sorted[] = sortArray(arr[]);
^**
如何修复此错误。如果我删除 [] 我会收到更多错误
答案 0 :(得分:3)
相当多的错误。修正了它:
#include <iostream>
using namespace std;
template <class T>
T* sortArray(T data[], int arrsize) // better pass the size of the array, and return T*
{
int x,y,temp;
for(y=0;y<arrsize;y++)
{
for(x =0;x<arrsize-y-1;x++)
{
if(data[x]>data[x+1])
{
temp = data[x];
data[x] = data[x+1];
data[x+1] = temp;
}
}
}
return data;
}
int main()
{
int x;
int arr[6] = {10,7,32,65,12,6};
int *sorted = sortArray(arr, sizeof(arr)/sizeof(arr[0])); // pass size of array
for(x=0;x<6;x++)
{
cout<<sorted[x]<<endl;
}
}
输出:
6
7
10
12
32
65
答案 1 :(得分:2)
T sortArray(T data[])
应该返回T
,但您使用int
数组来捕获它:
int sorted[] = sortArray(arr[]);
要计算,您可以将此方法更改为(您无需返回它,即删除return
行):
void sortArray(T data[])
并称之为:
sortArray<int>(arr);
答案 2 :(得分:1)
sortArray
的返回类型为T
,但您返回的是data
类型T[]
。您应该更改为以下原型:
T* sortArray(T data[]);
答案 3 :(得分:1)
你正在进行冒泡排序。
您需要按如下方式修复方法签名:
T * sortArray(T * data) {
在main()中,您需要修复通话:
int * sorted = sortArray(arr);
这应该可以解决错误。基本上,您正在发送一个指向数组的指针,并且您希望该方法返回指向已排序数组的指针。