Domanda

Ho seguente codice in C ++

#include <iostream>
using namespace std;

void qsort5(int a[],int n){
    int i;
    int j;
    if (n<=1)
        return;
    for (i=1;i<n;i++)
        j=0;
    if (a[i]<a[0])
        swap(++j,i,a);
    swap(0,j,a);
    qsort5(a,j);
    qsort(a+j+1,n-j-1);
}

int main()
{
    return 0;
}

void swap(int i,int j,int a[])
{
    int t=a[i];
    a[i]=a[j];
    a[j]=t;
}

ho problema

1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\utility(76) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(13) : error C2780: 'void std::swap(_Ty &,_Ty &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\utility(16) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(std::basic_string<_Elem,_Traits,_Alloc> &,std::basic_string<_Elem,_Traits,_Alloc> &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\xstring(2203) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(std::pair<_Ty1,_Ty2> &,std::pair<_Ty1,_Ty2> &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\utility(76) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(14) : error C2780: 'void std::swap(_Ty &,_Ty &)' : expects 2 arguments - 3 provided
1>        c:\program files\microsoft visual studio 9.0\vc\include\utility(16) : see declaration of 'std::swap'
1>c:\users\dato\documents\visual studio 2008\projects\qsort5\qsort5\qsort5.cpp(16) : error C2661: 'qsort' : no overloaded function takes 2 arguments
1>Build log was saved at "file://c:\Users\dato\Documents\Visual Studio 2008\Projects\qsort5\qsort5\Debug\BuildLog.htm"

Si prega di aiutare

È stato utile?

Soluzione

swap è una funzione in std che deve essere incluso per <iostream>. Quando si tenta di effettuare chiamate al vostro swap, non può trovare (ti spiego in un attimo) e invece guarda il std::sort, che prende due argomenti (da qui il primo errore).

Il motivo per cui non riesce a trovare il tuo swap è perché è stata dichiarata dopo che è stato chiamato. È necessario spostare sia la definizione del vostro swap superiore a quella del qsort5 o in avanti dichiararlo:

void swap(int i,int j,int a[]);

void qsort5(int a[],int n){ 
  ...

che dice al compilatore che la funzione di scambio esiste e userà che quando si chiama swap con 3 argomenti.

Altri suggerimenti

Si deve dichiarare la vostra versione di swap prima di usarla. Dal momento che il compilatore non ha visto una dichiarazione, ha usato quella che trovò nello spazio dei nomi std. Inoltre, è mispelled qsort5 (omettendo il 5 nell'ultima riga della funzione). Anche in questo caso, il compilatore ha trovato una funzione con lo stesso nome (ma una firma diversa) in std e si lamentava.

Si dovrebbe spostare sia l'intera definizione di swap ad una posizione prima della funzione di qsort5 o inserire una dichiarazione

void swap(int i,int j,int a[]);

prima qsort5.

Non utilizzare using namespace std;, è generalmente cattiva pratica. questo porta std :: scambio in ambito, scelte in modo compilatore up che scambio, anziché tua (dal vostro non è definita affatto questo punto).

definizione Sposta del vostro scambio prima di utilizzarlo.

Sembra che mancano una parentesi:

for (i=1;i<n;i++)
    j=0;

Nel ciclo precedente, j viene azzerato un sacco di volte. Questo può essere semplificata (da voi e sarà dal compilatore) a:

j = 0;

In caso contrario, v'è un insieme di parentesi graffe mancante o qualcos'altro.

A meno che questo è un esercizio, Hai pensato di usare std::sort invece di reinventare la ruota? Poi l'errore va via perché la funzione qsort5 può essere rimosso.

vi aspettate lo swap (int int, int) funzione da chiamare. Tuttavia, se si guarda l'errore, si parla 'std :: vuoto swap (...)'. Questo è perché siete using namespace std, e la funzione di swap viene dichiarato sotto qsort5.

Quindi sembra per una funzione di scambio, e può vedere solo std: swap. Prova a mettere la vostra funzione di scambio sopra qsort5 modo che possa vedere che uno pure.

Hai forse intenzione di chiamare qsort5 alla fine, e chiamare qsort invece?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top