我两天前开始学习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
;我已经看到过类似主题的多个问题,但我仍然不知道应该怎么做。
答案 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
,而不是数组,而int
和const int *arr
意味着同样的事情,并将const int arr[4]
声明为指针,而不指示有多少arr
被指向的信息。错误信息只是令人困惑。
要允许使用标准库容器类型跟踪此而不使用,您可以通过引用传递数组:
int
要允许传入任意长度的数组,可以将其设为函数模板:
int sumArray(const int (&arr)[4])
答案 1 :(得分:2)
C ++不支持这种数组的foreach
- 样式循环,因为它没有任何大小信息来构造底层迭代。正如评论中所建议的那样,最好只使用std::vector
。
如果大小信息可用,例如在数组和for
都在同一"范围"的情况下,可能工作。有关信息,请参阅this question。