我有一个我在这里写的快速入口:
void swap(int& a, int& b);
int mid(int lo, int hi);
// My quicksort implementation
void sort(int vec[], int lo, int hi)
{
int mid;
if (hi > lo) {
int i = lo + 1;
int j = hi;
int p = mid(lo, hi);
swap(vec[lo], vec[p]);
mid = vec[lo];
while (i < j) {
if (vec[i] <= mid) {
i++;
} else {
while (i < --j && vec[j] >= mid);
swap(vec[i], vec[j]);
}
}
i++;
swap(vec[lo], vec[i]);
sort(vec, lo, i);
sort(vec, j, hi);
}
}
void swap(int& a, int& b)
{
int temp = a;
a = b;
b = temp;
}
int mid(int lo, int hi)
{
return lo + ((hi - lo) / 2);
}
Run Code Online (Sandbox Code Playgroud)
我尝试编译到一个目标文件,g++ -g -c array.cpp -o array.o
我收到此错误:
array.cpp:24:14: error: called object type 'int' is not a function or function
pointer
int p = mid(lo, hi);
~~~^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
一切看起来都很正确.任何人都可以帮我弄清楚出了什么问题吗?
das*_*ght 25
您的局部变量mid在更接近使用点的范围内声明,因此它"遮蔽"该mid()函数; 编译器认为您正在尝试"调用"一个无效的整数.重命名局部变量以解决此问题:
int midpoint;
if (hi > lo) {
int i = lo + 1;
int j = hi;
int p = mid(lo, hi);
swap(vec[lo], vec[p]);
midpoint = vec[lo];
...
}
Run Code Online (Sandbox Code Playgroud)
注意:您也可以使用::mid(lo, hi)而不是重命名变量,但这会使您的程序的读者感到困惑.