2

我试图超载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

4

3 回答 3

2

您在哪个命名空间中声明了operator<<? 由于TRTableis a typedef ADL不适用,因此operator<<namespace std由 ADL 搜索,因为这是定义实际类的位置。因此,当您想使用它时,您可能必须使用use您定义的名称空间。operator<<

于 2012-05-26T17:30:03.733 回答
0

rhs应该是const TuringMachine::TRTable&

std::ostream& operator<<(std::ostream& lhs, const TuringMachine::TRTable& rhs)
于 2012-05-26T14:40:55.903 回答
0

lhs应该有类型std::ostream &。没有const

于 2012-05-26T12:54:49.103 回答