Range based for loop throws a compiler error with array parameter
c++, visual-studio
Solution
Inside `printArray`, `a` is not an array! I know it looks like one, but it's not. `int a[]` there means `int* a`, due to a nasty legacy from the 1850s.
Here is the fix to your problem, passing in the array by reference and therefore keeping its full type (including numerical dimension):
#include <iostream>
template <size_t N>
void printArray(int (&a)[N]) {
for (int i : a) {
std::cout << i << " ";
}
}
int main() {
int a[] = { 1, 2, 3, 4, 5 };
printArray(a);
}
(I've also removed some redundant code and that horrid `system("pause")`: properly configure your execution environment rather than having your program take responsibility for blocking its caller when it's finished!)
(live demo)
Problem
Admittedly, I'm just finding my footsteps in C++ but I don't understand the error here. The following error gets displayed: `Error 1 error C3312: no callable 'begin' function found for type 'int []'` `Error 2 error C3312: no callable 'end' function found for type 'int []'` `Error 3 error C2065: 'i' : undeclared identifier` `4 IntelliSense: this range-based 'for' statement requires a suitable "begin" function and none was found` Code: ``` #include <iostream> using namespace std; void printArray(int[]); int main() { int a[] = { 1, 2, 3, 4, 5 }; printArray(a); system("pause"); return 0; } void printArray(int a[]) { for (int i : a) { cout << i << " "; } } ``` Can't figure out what the problem is.