Khi tôi cố gắng biên dịch đoạn mã sau vào gcc 4.8.2, tôi nhận được lỗi sau:Phạm vi dựa cho vòng lặp trên mảng truyền cho chức năng phi chính
test.cc: In function ‘void foo(int*)’: test.cc:15:16: error: no matching function for call to ‘begin(int*&)’ for (int i : bar) { ^
Cùng với một bó trong khi những người khác từ sâu hơn trong thư viện mẫu.
#include <iostream>
using namespace std;
void foo(int*);
int main() {
int bar[3] = {1,2,3};
for (int i : bar) {
cout << i << endl;
}
foo(bar);
}
void foo(int* bar) {
for (int i : bar) {
cout << i << endl;
}
}
Nếu tôi xác định lại foo
để sử dụng lập chỉ mục cho vòng lặp, thì mã sẽ biên dịch và hoạt động như mong đợi. Ngoài ra, nếu tôi di chuyển vòng lặp đầu ra dựa trên dải ô thành main
, tôi cũng nhận được hành vi mong đợi.
Làm cách nào để chuyển mảng bar
đến foo
theo cách sao cho nó có khả năng thực hiện một vòng lặp dựa trên phạm vi trên đó?