cpp函数调用中的“不在此范围内”错误

时间:2014-10-14 02:18:14

标签: c++ function parameters scope

我试图在cpp中实现mergesort。但是,Dev-cpp 5.6.1报告了一些“不在此范围内”的错误。它说,“lo”,“mid”和“hi”未在此范围内声明。你能告诉我为什么会这样吗?感谢。

#include<iostream>
using namespace std;
void merge(int nums[], int lo, int mid, int hi) {
    int n1 = mid - lo + 1;
    int n2 = hi - mid + 1;
    /*Other implementation code omitted*/
}
int main() {
    /*code to Input numbers into nums[]*/
    merge(nums, 0, 4, 9);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

在阅读涉及语法错误的错误消息时,最重要的是要注意第一个错误消息。这是因为C ++编译器没有义务在第一个错误处停止,并且可能由于第一个错误而产生更多错误。

在原始代码中,您对nums函数的merge()参数声明中存在语法错误:

#include<iostream>
using namespace std;
int nums[10];
void merge(int[] &nums, int lo, int mid, int hi) {
    int n1 = mid - lo + 1;
    int n2 = hi - mid + 1;
    /*Other implementation code omitted*/
}
int main() {
    /*code to Input numbers into nums[]*/
    merge(nums, 0, 4, 9);
}

您已编辑程序以删除该语法错误,但使用此原始代码,我看到以下错误消息:

x.cc:3: error: expected ',' or '...' before '&' token
x.cc: In function 'void merge(int*)':
x.cc:4: error: 'mid' was not declared in this scope
x.cc:4: error: 'lo' was not declared in this scope
x.cc:5: error: 'hi' was not declared in this scope
x.cc: In function 'int main()':
x.cc:3: error: too many arguments to function 'void merge(int*)'
x.cc:11: error: at this point in file

您报告了was not declared in this scope错误,但未提及第一个错误,指出了nums的语法错误。由于此语法错误,编译器无法解析其余的函数参数,因此它将这些标识符报告为没有可见的声明。

修复此错误会删除其他错误。这是因为函数原型的解析器现在会获取其余的函数参数,所以这些参数现在都在函数的其余部分的范围内。