c++ - 错误 : called object type 'int' is not a function or function pointer

标签 c++ quicksort

我在这里写了一个快速排序:

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);
}

我尝试使用 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.

一切看起来都正确。谁能帮我找出问题所在?

最佳答案

您的局部变量 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];
    ...
}

注意:您也可以使用 ::mid(lo, hi) 而不是重命名变量,但这会使程序的读者感到困惑。

关于c++ - 错误 : called object type 'int' is not a function or function pointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19733090/

相关文章:

Java快速排序,从用户输入文件读取到任何数组(待排序)

python - 实现快速排序并得到一个我不明白的错误

c++ - 在单个链表中搜索特定值

c++ - 为基本数据类型和 Eigen 数据类型编写模板函数

c++ - 从 C++ 链接到 C 库 : why isn't extern always needed?

c - 为什么在将反向排序数组作为输入时出现段错误?

java - 首先递归快速排序的小边

java - 双向链表上的快速排序

c++ - 这是堆碎片的迹象吗?

c++ - 带有 Boost 库的 CMake Windows 10 库未正确找到