我已经在以下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"

请帮助

有帮助吗?

解决方案

swap是在std一个函数,它必须由<iostream>被包括在内。当您尝试拨打电话到您的swap,它无法找到它(我将在稍后解释),而是着眼于std::sort,这需要两个参数(因此第一个错误)。

无法找到你的swap的原因是它被称为后声明。您需要上移高于swapqsort5的定义或转发声明它:

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

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

这告诉编译器,您的交换功能的存在,它会使用,当你调用swap有3个参数。

其他提示

您必须在使用前声明你swap的版本。由于编译器没有看到一个声明,它用它的std命名空间中的一个。此外,您拼写错误qsort5(在函数的最后一行省略5)。再次,编译器发现在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 :: swap(...)”。这是因为你是using namespace std,和你交换函数声明如下qsort5。

因此,它看起来的交换功能,只能看到标准:交换。尝试把以上qsort5您的交换功能,因此可以看到,一个为好。

你或许打算在年底调用qsort5,并快速排序,而不是打电话?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top