错误:被调用的对象类型"int"不是函数或函数指针
error: called object type 'int' is not a function or function pointer
我在这里写了一个快速排序:
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)
而不是重命名变量,但这会使程序的读者感到困惑。
int mid(int lo, int hi); // here you declared mid as function and defined
// it later
// My quicksort implementation
void sort(int vec[], int lo, int hi)
{
int mid; // but here you declared mid as local variable
if (hi > lo) { // it will shadow int mid(int lo, int hi);
int i = lo + 1;
int j = hi;
int p = mid(lo, hi); // so this is error, mid is integer not a function
您可以在算法中更改变量的名称,或使用范围解析运算符::mid(lo, hi)
来访问先前在全局作用域中定义的函数mid
有时当你有一个变量和函数相同的命名时,它会给出这个错误。编译器无法理解此名称指的是函数或变量;
相关文章:
- 在函数 'int main(int, char**) 中,没有声明 'MIN'
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 重载函数 int vs double
- 错误 C2084:函数"int main(void)"已具有主体
- 无效使用非静态成员函数 int test::funcAB(int, int)
- 错误:函数"int open(...)"的隐式声明
- 如何在没有参数的情况下实现返回双向链表大小的函数?int size() const.
- 错误:参数太少,无法函数"int Solution(std::vector<int>, int)"
- arr++ 在函数"int f(int arr[])"中是什么意思?
- 带有声明帐户的C 构造函数(int = 0);
- 如何初始化一个在C++中期望向量和变量的构造函数<int>?
- C++,实现函数"int next(std::string param)"时出现奇怪的编译器错误
- 单链表交换函数(int,int)
- 插入 std::map<int, std::vector 的简短函数<int>>
- 函数int get()和istream&get(char&c)有什么区别
- 该函数 int f() 没有警告不返回任何值?
- 没有用于启动"ostream_iterator"的匹配构造函数<int>
- 函数"int __cdecl invoke_main(void)"中引用LNK2019未解析的外部符号_main错误 (?invoke_main@@YAHXZ)
- 函数"int (*function())[10];"是什么意思?
- 非成员函数 'int find(const T&)' 不能有 cv 限定符