Я пытаюсь перегрузить operator<<
, и это сводит меня с ума:
std::ostream& operator<<(std::ostream & lhs, TuringMachine::TRTable& rhs){
for(auto& statePtr : rhs){
lhs << statePtr.first->getLabel().toStdString();
for(auto& charPtr: statePtr.second){
//lhs << '\t';
lhs << charPtr.first.toAscii() ;
//lhs << 'b ';
lhs << charPtr.second.getState().getLabel().toStdString() << std::endl;
}
}
return lhs;
}
TRTable
это typedef
для std::map<State*, std::multimap<QChar, Transition>>
. State
имеет метку QString
, отсюда и вызов .toStdString()
.
В другом классе я вызываю std::cout << machine->table << std::endl;
, где machine
является TuringMachine*
, и это дает мне
error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
Что я делаю неправильно? Почему &&
?
РЕДАКТИРОВАТЬ: используя g++ 4.6 и -std=c++0x
toStdString()
иtoAscii()
являются функциями-членамиQString
иQChar
. Они возвращаютstd::string
иchar
соответственно. Ошибка возникает в строке, где я вызываюstd::cout << machine->table << std::endl
- person TeaOverflow   schedule 26.05.2012operator<<
с того места, где вы пытаетесь ее использовать? (Ранее в том же файле или в заголовке #included) - person aschepler   schedule 26.05.2012inline
, и теперь это работает! Спасибо! Но почему не хватило охранников заголовочного файла? - person TeaOverflow   schedule 26.05.2012