Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;不在此范围内”;调用cpp函数时出错_C++_Function_Parameters_Scope - Fatal编程技术网

C++ &引用;不在此范围内”;调用cpp函数时出错

C++ &引用;不在此范围内”;调用cpp函数时出错,c++,function,parameters,scope,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; /

我试图在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;
}
#包括
使用名称空间std;
无效合并(int nums[],int lo,int mid,int hi){
int n1=中-低+1;
int n2=高-中+1;
/*省略了其他实现代码*/
}
int main(){
/*将数字输入nums[]的代码*/
合并(nums,0,4,9);
返回0;
}

阅读包含语法错误的错误消息时,最重要的是要注意第一条消息。这是因为C++编译器在第一个错误时没有义务停止,因此第一个错误的结果可能会产生更多的错误。 在原始代码中,在
merge()
函数的
nums
参数声明中出现语法错误:

#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);
}
您报告了
未在此范围内声明的
错误,但没有提到第一个,它指出了
nums
的语法错误。由于此语法错误,编译器无法解析其余的函数参数,因此它报告这些标识符没有可见的声明


修复此错误将删除其他错误。这是因为函数原型的解析器现在拾取其余的函数参数,因此这些参数现在在函数其余部分的作用域内。

当您将nums作为参数传递时,为什么nums是一个全局变量
int[]&nums
不是合法的语法,你的意思是
int nums[]
?我将nums[]设置为全局,因为将有另一个函数merge\u sort()也适用于nums[]。是的,我的意思是
int nums[]
。但是
intnums[]
没有使用引用。可以使用代码> >合并(int NoS[],int loo,int MID,int HI)< /C>修改全局NUS[]?C++中的C风格数组是奇怪的,不遵循正常语法。code>int nums[]不会复制数组,对其所做的更改将影响传递的数组。不要使用全局变量。如果希望
merge\u sort
在非nums的数组上工作,该怎么办?这就是为什么它有参数。哦,我知道。我将更改代码。谢谢但另一个问题仍然存在。为什么“lo”、“mid”和“hi”被称为“未在范围内声明”?您是否提供了完整的代码?非常感谢你告诉我这件事!下次我将重点讨论第一个错误。
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