c++ - 打印多 map map 的方法?

标签 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对于 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 和 -std=c++0x

最佳答案

您在哪个命名空间中声明了 operator<< ?自 TRTable是一个 typedef ADL不适用,所以 operator<<仅在 namespace std 中搜索由 ADL 定义,因为这是定义实际类的地方。所以你可能必须use您定义 operator<< 的命名空间当你想使用它时。

关于c++ - 打印多 map map 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766381/

相关文章:

c++ - 多重递归

c++ - 在 C++ 中用逗号格式化数字

C++:本地时间提升一小时

c++ - 管理指针 vector 和对象 vector 的模板类

c++ - 模板类型的重载决策和运算符 << 的问题 - 第 2 部分

c++ - 当重载大于运算符以比较来自不同类的两个 double 值时,出现操作数错误

c++ - 使用 "argv"传递图像文件C++

c++ 异常:抛出 std::string

c++ - 打印出一个 std::vector<std::wstring>

c++ - operator == 重载函数失败