Alb*_*gni 0 c++ parameter-passing
我两天前开始学习 C++,我遇到的这个错误对我来说很模糊,我正在尝试执行以下操作
\n\nint sumArray(const int arr)\n{\n int sum = 0;\n for (auto &n : arr) {\n sum += n;\n }\n return sum;\n};\n\nint main () \n{\n int numbers[] = {1, 2, 5, 10};\n return sumArray(numbers);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这与“C++ 之旅”中的示例略有不同,我收到的错误是
\n\ncpprepl.cpp: In function \xe2\x80\x98int sumArray(int)\xe2\x80\x99:\ncpprepl.cpp:4:18: error: \xe2\x80\x98begin\xe2\x80\x99 was not declared in this scope\n for (auto &n : arr) {\n ^~~\ncpprepl.cpp:4:18: error: \xe2\x80\x98end\xe2\x80\x99 was not declared in this scope\ncpprepl.cpp: In function \xe2\x80\x98int main()\xe2\x80\x99:\ncpprepl.cpp:13:26: error: invalid conversion from \xe2\x80\x98int*\xe2\x80\x99 to \xe2\x80\x98int\xe2\x80\x99 [-fpermissive]\n return sumArray(numbers);\n ^\ncpprepl.cpp:1:5: note: initializing argument 1 of \xe2\x80\x98int sumArray(int)\xe2\x80\x99\n int sumArray(const int arr)\n ^~~~~~~~\n
如果我做
\n\nint main () {\n int arr[] = {1, 2, 5, 10};\n\n int sum = 0;\n for (auto &n : arr) {\n sum += n;\n }\n return sum;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n一切都很好,所以我怀疑我不理解指针以及 C++ 如何传递numbers给sumArray; 我已经看到了有关类似主题的多个问题,但我仍然不知道应该如何完成此操作。
小智 5
如前所述,const int arr没有意义,因为它只是一个单一的int,而不是一个数组,并且const int *arr和const int arr[4]意味着相同的事情并声明arr为指针,而没有有关int指向多少个的信息。错误消息只是令人困惑。
为了允许在不使用标准库容器类型的情况下跟踪这一点,您可以通过引用传递数组:
int sumArray(const int (&arr)[4])
Run Code Online (Sandbox Code Playgroud)
要允许传入任意长度的数组,可以将其设为函数模板:
template <int N> int sumArray(const int (&arr)[N])
Run Code Online (Sandbox Code Playgroud)