【问题标题】:Compiler Error when passing an array as a param in VC++ 2010在 VC++ 2010 中将数组作为参数传递时出现编译器错误
【发布时间】:2010-12-08 19:12:24
【问题描述】:

这可能是一个新手问题,因为我刚刚学习编程。我正在学习 QuickSort 算法,我正在尝试将一个 int 数组作为参数传递给我的函数 quickSort()。当我尝试在 VC++ 2010 中编译时,出现编译器错误。

我查看了如何将数组作为参数传递,并尝试反映他们所做的事情,但它似乎不起作用。这里:Here 是我查找的位置,它是页面的最后一部分(一直滚动到底部)。我已尝试按照该文章中的说明传递数组,但仍然出现编译错误。有关我在做什么和编译错误的示例,请参见下面的代码简介(不完整)。有什么建议吗?

int aTest[7] = {7, 5, 9, 3, 4, 8, 6};
int left = 0;
int right = 6; 
quickSort(aTest, left, right);   //this is line 16 referenced in the compiler error
void quickSort(int aTest[], int left, int right)

//main.cpp(16): error C2664: 'quickSort' : cannot convert parameter 1 from 'int [7]' to 'int'
//          There is no context in which this conversion is possible

【问题讨论】:

  • 不要引用任何网站告诉您#define 常量。
  • 我什至没有意识到它建议这样做。我知道最好不要这样做:)

标签: c++ arrays visual-c++ compiler-errors quicksort


【解决方案1】:

据我了解,这是 C,而不是 C++。 如果我理解正确,您应该将原型放在“第 16 行”之前。
原型,我的意思是void quickSort(int aTest[], int left, int right)这一行。

【讨论】:

  • 当我更改它以使 quickSort() 定义高于 main() 时,这似乎解决了它。我的前向声明有什么问题,为什么它只期待一个 int?
  • @Empire:您可能正在使用 C++ 编译器,但您正在使用 C 进行编程。
  • 我是?我不知道我知道 C :)。你能告诉我哪里出错了,以便我可以将它从 C 更改为 C++ 吗?我一直在学习的所有东西,我得到的所有信息,都来自 C++ 教程,所以我不确定我哪里出错了。
  • @TheEmpire:使用 C++ 编译器,错误应该告诉您该函数尚未在第 16 行声明。但是 C 编译器应该接受它,并且可能会抱怨 quickSort 的声明得到它的签名与预期的不同(假定未声明的函数返回 int)。
  • 奇怪。我希望我有原始代码可以在上面发布,看看我哪里出错了。我只是尝试通过编写一个新程序来复制它,就像我编写第一个程序一样,并且没有编译错误。所以我想这不是“相同”的方式:) 感谢大家的帮助。第一次在这里发帖,我已经很喜欢这个社区了。
【解决方案2】:

正如 anatolyg 所说,这是原型订单。编译器假设快速排序采用单个 int 参数。尝试设置最高警告级别,您应该会看到未定义快速排序的警告。

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 2013-05-06
    • 2018-02-12
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多