c ++无法转换' double'到'加倍*'对于参数1到' void sort(double *,int)'错误

时间:2015-05-30 01:45:14

标签: c++ c

我是一名正在听c编程课程的学生,我正在使用c ++来“引用”#。我不知道如何准确地使用c ++,所以我使用c并将其保存到.cpp文件中。无论如何,我使用函数对数组进行排序,现在我有一个错误。我该怎么做才能解决这个错误?

#include <stdio.h>
#include <math.h>

double round(double value);
void sort(double a[],int cnt);
void swap(double& x,double& y);

int main()
{
    int i;
    double array[3];
    for(i=0;i<3;i++){
    scanf("%lf",&array[i]);
    }
    sort(array[3],3);
    printf("%d %d %d",ceil(array[0]),floor(array[2]),round(array[1]));
    return 0;
}

double round(double value)
{
    return floor(value+0.5);
}

void sort(double a[],int cnt)
{
    int i,j;
    for(i=0;i<cnt-1;i++){
        for(j=i+1;j<cnt;j++){
                if(a[i]<a[j]){
                    swap(a[i],a[j]);
                }
            }
        }
}

void swap(double& x,double& y)
{
    int imsi=x;
    x=y;
    y=imsi;
}

3 个答案:

答案 0 :(得分:5)

您的sort(double a[], int cnt)函数作为第一个参数double a[],它是指向数组第一个元素的指针double*的语法糖。但是在main()中,您将其作为

调用
sort(array[3], 3); // you pass a double here, not a double*

在上面的调用中,您传递数组array的第4个元素,即double,而不是指针double*。要将指针传递给数组的第一个元素,请用

替换上面的调用
sort(array, 3); // you now pass a double* (i.e. pointer to first element of the array)

编译器基本上会告诉你错误:

  

错误:无法将参数'1'的'double'转换为'double *'为'void   sort(double *,int)'sort(array [3],3);

预计double*,但您传递double。它会尝试将double转换为double*,但这种转换是不可能的,因此会出错。

答案 1 :(得分:2)

除了主要问题(已经由其他用户回答)之外,您应该更改swap()功能,这样就不会使用int来存储double。这可能会导致意外行为。

答案 2 :(得分:0)

您将面临的下一个问题:

printf("%d %d %d",ceil(array[0]),floor(array[2]),round(array[1]));

对于print float,您可以使用"%f"

只需使用库cin中的coutiostream代替scanfprintf

for(i=0;i<3;i++) {
    std::cin>>array[i]>>' ';
}

for(i=0;i<3;i++) {
    std::cout>>array[i]>>' ';
}

btw http://www.cplusplus.com/reference/可能会对您有所帮助。