Tôi có một số người dùng được xác định vòng lặp, và tất cả bây giờ và sau đó tôi nhận được một lỗi lạ mà rất dễ dàng để làm việc xung quanh, nhưng tôi không hiểu tại sao tôi nhận được nó:Tại sao địa chỉ của phần tử mảng đôi khi bị nhầm lẫn với một tuyên bố?
uint8_t bytes[pitch*height];
array_iterator::col_iterator a(&bytes[0]);
array_iterator::row_iterator base_iter_begin(
array_iterator::col_iterator(&bytes[0]), width, pitch);
array_iterator::row_iterator base_iter_end(
array_iterator::col_iterator(&bytes[pitch*height]), width, pitch
);
Tôi có một lớp được gọi là array_iterator với row_iterator typedefs và col_iterator được nhúng. Phương thức khởi tạo row_iterator lấy một col_iterator làm đối số đầu tiên của nó. Câu lệnh đầu tiên và cuối cùng hoạt động tốt. Báo cáo kết quả giữa thất bại trong việc biên dịch với các lỗi sau:
test-2d-iterators.cc:780: error: declaration of 'bytes' as array of references
Viết & (byte [0]) không giải quyết vấn đề (không đáng ngạc nhiên, vì [] có độ ưu tiên cao hơn &). Tất nhiên, tôi chỉ có thể thay thế "a" cho lệnh gọi hàm dựng col_iterator rõ ràng, nhưng tại sao tôi phải thực hiện? Và nếu có một vấn đề, tại sao trình tạo col_iterator trong dòng biên dịch cuối cùng?
Cảm ơn.
Hầu hết các phân tích cú pháp có thể? –
Đăng một ví dụ * ngắn * để khắc phục sự cố. –
Nó có thể là Parse Vexing nhất, nhưng tôi không chắc chắn. Không phải dòng thứ ba sẽ phân tích theo cùng một cách? static_cast (& bytes [0]) giải quyết vấn đề, nhưng chỉ cần thêm parens xung quanh & byte [0] thì không. Xin lỗi ví dụ không phải là chưng cất nhiều hơn, nhưng vấn đề dường như đến và đi với không có vần điệu hoặc lý do (tức là, làm thế nào là dòng thứ ba khác nhau từ thứ hai?), Vì vậy, nó đã chống lại những nỗ lực của tôi. Nó chắc chắn trông giống như một lỗi phân tích cú pháp, mặc dù, vì vậy tôi sẽ nghĩ rằng nó không phụ thuộc vào những gì row_iterator hoặc col_iterator thực sự là. –
user1806566