我正在尝试重载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
的{{1}}。 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和&&
答案 0 :(得分:2)
您在哪个名称空间声明了operator<<
?由于TRTable
是typedef ADL不适用,因此operator<<
仅在namespace std
中由ADL搜索,因为这是定义实际类的位置。因此,当您想要使用use
时,您可能需要operator<<
命名空间。
答案 1 :(得分:0)
lhs
应该有std::ostream &
类型。否const
。
答案 2 :(得分:0)
rhs
应为const TuringMachine::TRTable&
:
std::ostream& operator<<(std::ostream& lhs, const TuringMachine::TRTable& rhs)