c++ ist nicht in der 'double' in 'double*' for argument 1 to 'void sort(double*,int)' error
Ich bin ein Schüler hören zu c-Programmierung Lektion, und ich bin mit c++ zu 'call-by-reference'. Ich weiß nicht, wie man c++ genau, also ich benutze c, und speichern Sie es in .cpp-Datei. Jedenfalls habe ich eine Funktion ein array Sortieren, und ich habe jetzt einen Fehler. Was sollte ich tun, um dieses Problem zu lösen Fehler?
#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;
}
- Das ist C++ - code, nicht C.
- Was ist deine eigentliche Frage? "Erklären Sie, meinen code" ist sicherlich Ihre Aufgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
sort(double a[], int cnt)
- Funktion nimmt als erstes argumentdouble a[]
, das ist syntaktischer Zucker für Zeigerdouble*
auf das erste element eines Arrays. Aber inmain()
Sie es aufrufen, wieIn der obige Aufruf übergeben Sie das 4-te element des array
array
, d.h. einedouble
, nicht ein Zeigerdouble*
. Übergeben Sie einen Zeiger auf das erste element des Arrays, ersetzen Sie den obigen Aufruf mitDen compiler ist im Grunde sagen, was falsch ist:
Es erwartet Sie eine
double*
aber Sie passieren einedouble
. Es versucht zu konvertierendouble
zudouble*
, aber eine solche Umwandlung ist unmöglich, daher der Fehler.Zusätzlich zu Ihrem Hauptanliegen (schon beantwortet von einem anderen Benutzer), sollten Sie vielleicht ändern Sie Ihre
swap()
- Funktion, so dass Sie nicht mit einemint
zu speicherndouble
. Dies könnte zu unerwartetem Verhalten führen.Nächste problem, das Sie konfrontiert mit:
für print-float benutzen, können Sie
"%f"
.Einfach zu verwenden
cin
undcout
aus der Bibliothekiostream
stattscanf
undprintf
btw http://www.cplusplus.com/reference/ nützlich sein könnte für Sie auf vielen Gründen.