auto in for循环导致"开始"在这方面没有申明

时间:2017-09-23 10:49:21

标签: c++ parameter-passing

我两天前开始学习C ++,我得到的这个错误对我来说是模糊的,我正在尝试做以下事情

int sumArray(const int arr)
{
  int sum = 0;
  for (auto &n : arr) {
    sum += n;
  }
  return sum;
};

int main () 
{
  int numbers[] = {1, 2, 5, 10};
  return sumArray(numbers);
}

这与“C ++之旅”中的一个例子略有不同,我得到的错误是

cpprepl.cpp: In function ‘int sumArray(int)’: cpprepl.cpp:4:18: error: ‘begin’ was not declared in this scope for (auto &n : arr) { ^~~ cpprepl.cpp:4:18: error: ‘end’ was not declared in this scope cpprepl.cpp: In function ‘int main()’: cpprepl.cpp:13:26: error: invalid conversion from ‘int*’ to ‘int’ [-fpermissive] return sumArray(numbers); ^ cpprepl.cpp:1:5: note: initializing argument 1 of ‘int sumArray(int)’ int sumArray(const int arr) ^~~~~~~~

如果我这样做

int main () {
  int arr[] = {1, 2, 5, 10};

  int sum = 0;
  for (auto &n : arr) {
    sum += n;
  }
  return sum;
}

一切都很好,所以我怀疑我不理解指针以及C ++如何将numbers传递给sumArray;我已经看到过类似主题的多个问题,但我仍然不知道应该怎么做。

2 个答案:

答案 0 :(得分:4)

如上所述,RewriteEngine on # Test without www RewriteCond %{HTTP_HOST} !^www\. [OR,NC] # Test for http RewriteCond %{HTTPS} off # Redirect to https www RewriteRule ^ https://www.exemple.com%{REQUEST_URI} [NE,R=301,L] 没有意义,因为它只是一个const int arr,而不是数组,而intconst int *arr意味着同样的事情,并将const int arr[4]声明为指针,而不指示有多少arr被指向的信息。错误信息只是令人困惑。

要允许使用标准库容器类型跟踪此而不使用,您可以通过引用传递数组:

int

要允许传入任意长度的数组,可以将其设为函数模板:

int sumArray(const int (&arr)[4])

答案 1 :(得分:2)

C ++不支持这种数组的foreach - 样式循环,因为它没有任何大小信息来构造底层迭代。正如评论中所建议的那样,最好只使用std::vector

如果大小信息可用,例如在数组和for都在同一"范围"的情况下,可能工作。有关信息,请参阅this question