này thất bại trong việc biên dịch trong gcc 4.1.2/RedHat 5:lỗi: không phù hợp cho 'operator []' trong ... <near match>
#include <string>
#include <vector>
#include <map>
class Toto {
public:
typedef std::string SegmentName;
};
class Titi {
public:
typedef Toto::SegmentName SegmentName; // import this type in our name space
typedef std::vector<SegmentName> SegmentNameList;
SegmentNameList segmentNames_;
typedef std::map<SegmentName, int> SegmentTypeContainer;
SegmentTypeContainer segmentTypes_;
int getNthSegmentType(unsigned int i) const {
int result = -1;
if(i < segmentNames_.size())
{
SegmentName name = segmentNames_[i];
result = segmentTypes_[ name ];
}
return result;
}
};
Lỗi này là:
error: no match for 'operator[]' in '(...)segmentTypes_[name]'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:340:
note: candidates are: _Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&)
[with _Key = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, _Tp = int, _Compare = std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, _Alloc = std::allocator<std::pair<const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int> >]
Tại sao ? Bản đồ khá đơn giản. Tôi đoán điều này đã làm với typedefs, nhưng những gì là sai?
[sửa] Ngay cả khi tôi xóa tất cả các typedefs
và sử dụng std::string
ở khắp mọi nơi, sự cố vẫn tiếp diễn ... Tôi có sử dụng sai bản đồ không?
Hoặc 'at' trong C++ 11. +1 –
@LuchianGrigore Tôi chắc chắn 'at' đã tồn tại trước khi C++ 11 – Saage
@Saage chỉ làm phần mở rộng. Bây giờ nó là tiêu chuẩn. – juanchopanza