Trong tệp tiêu đề của tôi, tôi đã đưa vào sơ đồ std :: và sử dụng không gian tên thích hợp.
Một trong những thành viên của tôi là:Lỗi biên dịch khi sử dụng trình lặp vòng bản đồ
map<unsigned int, double> pT_Spam;
Và trong tập tin cpp của tôi, tôi cố gắng làm điều gì đó mà tôi đã và đang làm thường xuyên trong một thời gian bây giờ là:
for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}
Ở trên là thậm chí đề cập trong một ví dụ về việc sử dụng std :: map tại cplusplus.com. Mặc dù tôi đã thực hiện khá giống nhau ở các phần khác của mã không gây ra lỗi biên dịch, trên dòng cụ thể này, tôi nhận được lỗi sau từ Cygwin:
error: conversion from `std::_Rb_tree_const_iterator<std::pair<const unsigned int, double> >' to non-scalar type `std::_Rb_tree_iterator<std::pair<const unsigned int, double> >' requested
Điều này có vẻ hơi lạ. Bất cứ ý tưởng những gì có thể là sai? (Tiêu đề của tôi là, tất nhiên, bao gồm trong cpp của tôi)
Điều đó phàn nàn rằng trình vòng lặp được trả về bởi hàm start() là một hàm const_iterator, nhưng bạn đang gán nó cho một trình lặp. Nhưng tôi không chắc tại sao, điều này cũng đúng với tôi. Trình biên dịch này là gì? – Joe
[begin()] (http://cplusplus.com/reference/stl/map/begin/) dường như cũng có khả năng trả về các biến lặp không phải là const. Tôi sử dụng g ++ của Cygwin trên các cửa sổ. – jathanasiou