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>>StateQString.toStdString()

別のクラスでは、私はビーイングで電話std::cout << machine->table << std::endl;します、そしてこれは私に与えますmachineTuringMachine*

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<<か?TRTableはtypedefADLが適用されないため、実際のクラスが定義されている場所であるため、はADLによってのみoperator<<検索されます。namespace stdしたがってuse、いつ使用するかを定義した名前空間が必要になる場合がありoperator<<ます。

于 2012-05-26T17:30:03.733 に答える
0

lhsタイプが必要std::ostream &です。いいえconst

于 2012-05-26T12:54:49.103 に答える
0

rhsする必要がありますconst TuringMachine::TRTable&

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