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

How to fix this bug on sorting an array?

本文关键字:数组排序 错误 何修复      更新时间:2023-10-16
#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;
   }
}

当我试图排序编译这个代码时,我得到了的错误

**abcmain.cpp:34: error: expected primary-expression before ']' token
 int sorted[] = sortArray(arr[]);
                              ^**

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

大错特错。在这里修复:

#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
T sortArray(T data[])

应该返回一个T,但您使用的是int数组来捕获它:

int sorted[] = sortArray(arr[]);

要计算,您可以将此方法更改为(不需要返回,即删除return行(:

void sortArray(T data[])

并称之为:

sortArray<int>(arr);

sortArray的返回类型是T,但您返回的是T[]类型的data。您应该更改为以下原型:

T* sortArray(T data[]);

您正在进行冒泡排序。

您需要按照如下方式修复方法签名:

T*sortArray(T*数据({

在main((中,您需要修复调用:
int*sort=sortArray(arr(;

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