У меня есть класс со следующими личными членами:
private:
int *vals_;
size_type *cidx_;
std::map< size_type, std::pair<size_t, unsigned int> > ridx_;
Теперь я пытаюсь получить доступ к этим переменным в операторе << overload: (Обратите внимание, что <strong>m равно )
std::ostream& operator<<(std::ostream &os, const SMatrix &m)
{
os << m.cidx_[0] << endl;
os << m.ridx_[0].first << endl;
return os;
}
Я обнаружил, что m.cidx_ [0] будет работать, но m.ridx_ [0] .first выдает ошибку:
ошибка: передача 'const std :: map, std :: less, std :: allocator>>>' в качестве аргумента 'this' для оператора _Tp & std :: map <_Key, _Tp, _Compare, _Alloc> :: operator [] (const _Key &) [с _Key = без знака int, _Tp = std :: pair, _Compare = std :: less, _Alloc = std :: allocator>>] 'отбрасывает квалификаторы
Что, я считаю, означает, что operator [] является модифицирующим оператором и, следовательно, противоречит тому факту, что m является const. Но почему это работает для vals_ и cidx_, которые являются массивами типа int и size_type?