我在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"
请帮助
答案 0 :(得分:5)
在使用之前,您必须声明swap
的版本。由于编译器没有看到声明,因此它使用了它在std
命名空间中找到的声明。另外,你拼错qsort5
(省略函数最后一行的5)。同样,编译器在std
中找到了一个具有该名称(但不同的签名)的函数并抱怨。
您应该将swap
的整个定义移动到函数qsort5
之前的位置或插入声明
void swap(int i,int j,int a[]);
在qsort5
之前。
答案 1 :(得分:4)
swap
是std
中的一项功能,必须包含在<iostream>
中。当你试图调用你的swap
时,它找不到它(我稍后会解释),而是查看std::sort
,它带有两个参数(因此第一个错误)
找不到swap
的原因是因为它是在调用之后声明的。您需要将swap
的定义移到qsort5
之上,或者向前声明它:
void swap(int i,int j,int a[]);
void qsort5(int a[],int n){
...
告诉编译器您的交换函数存在,当您使用3个参数调用swap
时,它将使用它。
答案 2 :(得分:1)
不要使用using namespace std;
,一般都是不好的做法。这会将std :: swap带入范围,因此编译器会选择交换,而不是你的交换(因为你的所有这一点都没有定义)。
在使用之前移动交换的定义。
答案 3 :(得分:1)
看起来你错过了一个大括号:
for (i=1;i<n;i++)
j=0;
在上面的循环中,j
被设置为零一大堆。这可以简化(由您和将由编译器完成):
j = 0;
否则会有一组丢失的大括号或其他内容。
答案 4 :(得分:1)
除非这是练习,否则您是否考虑使用std::sort
而不是重新发明轮子?然后你的错误就消失了,因为qsort5
功能可以删除。
答案 5 :(得分:0)
您期望调用swap(int,int,int)函数。但是,如果你看一下错误,它会提到'void std :: swap(...)'。这是因为你是using namespace std
,你的交换函数声明在qsort5以下。
所以它寻找交换功能,只能看到std:swap。尝试将交换函数放在qsort5上方,这样它也可以看到那个。
答案 6 :(得分:0)
您是否打算最后调用qsort5,而是调用qsort?