打印多图谱地图的方法?

时间:2012-05-26 12:52:41

标签: c++ stl operator-overloading multimap

我正在尝试重载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;
}

TRTabletypedef的{​​{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和&&

3 个答案:

答案 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)