题
我已经在以下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
的原因是它被称为后声明。您需要上移高于swap
你qsort5
的定义或转发声明它:
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,并快速排序,而不是打电话?