我试图超载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;用machinebeeing a打电话,TuringMachine*这给了我
error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
我究竟做错了什么?为什么&&?
编辑:使用 g++ 4.6 和-std=c++0x