質問

私は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;
}

私は問題を抱えている。

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"

助けてください。

役に立ちましたか?

解決

swapstdによって含まれていなければならない<iostream>関数です。あなたはswapへの呼び出しを行うためにしようとすると、それはそれを見つける(私は一瞬で説明します)、代わりに二つの引数を取るstd::sort、(それゆえ、最初のエラー)を見ることができません。

それが呼び出された後、それが宣言されているため、

それはあなたのswapを見つけることができない理由があります。あなたはそれを宣言いずれか前方swapの上ごqsort5の定義を移動したりする必要があります:

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

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

それはあなたのスワップ機能が存在し、あなたは3つの引数を持つswapを呼び出すとき、それはそれを使用することをコンパイラに指示します。

他のヒント

あなたは、あなたがそれを使用する前にswapのバージョンを宣言する必要があります。コンパイラは、宣言を見ていないので、それがstd名前空間で見つかったものを使用しました。また、あなたは(関数の最後の行に5を省略)qsort5をmispelled。再び、コンパイラはstdでその名前の関数(ただし、異なるシグネチャ)を発見し、訴えた。

あなたはどちらかの機能swap前の位置にqsort5の定義全体を移動または宣言を挿入する必要があります。

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

using namespace std;を使用していない、一般的に悪い習慣です。 (あなたがすべてのこの時点では定義されていないので)、これはむしろあなたよりも、そのスワップまでスコープにはstd ::スワップので、コンパイラピックをもたらします。

あなたのスワップの移動の定義を使用する前に。

あなたのようなルックスは、ブレースが欠落している。

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

は、上記ループにおいて、jは時間の全体の束をゼロに設定されます。これはに(自分でコンパイラによるであろう)に簡略化することができます:

j = 0;

それ以外の場合は、中括弧または何か他の行方不明のセットがあります。

これは演習でない限り、

は、あなたがstd::sortを使用して代わりに車輪の再発明と考えがありますか? qsort5機能を除去することができるので、その後、あなたのエラーが表示されなくなります。

あなたは呼び出されるスワップ(int型、int型、int型)機能を期待しています。あなたがエラーを見ればしかし、それは、ボイドのstd ::スワップ(...) "に言及します。これは、あなたがusing namespace stdあるためであり、あなたのスワップ機能はqsort5の下に宣言されます。

スワップ:それはスワップ機能を探し、そして唯一のSTDを見ることができるように、

。それは同様にその1を見ることができるようにqsort5の上ごスワップ機能を入れてみてください。

あなたはおそらく最後にqsort5呼び出すするつもり、とのqsort代わりに電話した?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top