如何修复排序数组的这个错误?

时间:2014-04-13 05:57:24

标签: c++ arrays sorting

#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[]);
                              ^**

如何修复此错误。如果我删除 [] 我会收到更多错误

4 个答案:

答案 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);

这应该可以解决错误。基本上,您正在发送一个指向数组的指针,并且您希望该方法返回指向已排序数组的指针。