【发布时间】:2014-10-14 02:18:13
【问题描述】:
我试图在 cpp 中实现归并排序。但是,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;
}
【问题讨论】:
-
当你将nums作为参数传递时,为什么它是一个全局变量?
int[] &nums不是合法的语法,你的意思是int nums[]? -
我将 nums[] 设置为全局,因为会有另一个函数 merge_sort() 也适用于 nums[]。是的,我的意思是
int nums[]。但是int nums[]没有使用参考。merge(int nums[], int lo, int mid, int hi)可以修改全局nums[]吗? -
C++ 中的 C 样式数组很奇怪,并且不遵循正常语法。
int nums[]不会复制数组,对它的更改会影响传递的数组。不要使用全局变量。如果你想让merge_sort在一个不是 nums 的数组上工作怎么办?这就是它有参数的原因。 -
哦,我知道。我将更改代码。谢谢。但另一个问题仍然存在。为什么说“lo”、“mid”和“hi”是“未在作用域内声明”?
-
你提供了完整的代码吗? ideone.com/05Q2lH
标签: c++ function parameters scope