【问题标题】:A way to print of map of multimaps?一种打印多图地图的方法?
【发布时间】:2012-06-01 17:49:11
【问题描述】:

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

TRTabletypedeffor std::map&lt;State*, std::multimap&lt;QChar, Transition&gt;&gt;State 的标签为 QString,因此调用 .toStdString()

在另一堂课上,我用machine 打电话给std::cout &lt;&lt; machine-&gt;table &lt;&lt; std::endl; TuringMachine*,这给了我

error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'

我做错了什么?为什么是&amp;&amp;

编辑:使用 g++ 4.6 和 -std=c++0x

【问题讨论】:

  • toStdString 和 toAscii 返回什么类型?你知道错误信息是针对哪一行的吗?
  • toStdString()toAscii()QStringQChar 的成员函数。它们分别返回 std::stringchar。错误发生在我调用std::cout &lt;&lt; machine-&gt;table &lt;&lt; std::endl 的行中
  • 这个operator&lt;&lt; 函数的声明是否从您尝试使用它的位置可见? (在同一文件的前面,或在#included 标头中)
  • 听起来你改变了一些东西。让我们与SSCCE 同步。
  • 来自这里的答案:stackoverflow.com/questions/10651161/… 听起来很相似。出于某种原因,编译器可能不会考虑您的运算符。这让 aschepler 的建议听起来很不错!

标签: c++ stl operator-overloading multimap


【解决方案1】:

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

【讨论】:

  • 令我感到羞耻的是,我必须承认我只是将它放在 .cpp 文件中。我试图避免多重定义错误并且完全没有意识到我可以通过将其留在标题中并在其前面加上 inline 来做到这一点,一切都会好起来的。就像现在一样:-)
【解决方案2】:

lhs 的类型应为 std::ostream &amp;。没有const

【讨论】:

  • 抱歉,我粘贴了该函数的过时版本。我的实际代码中没有 `const`。更新
【解决方案3】:

rhs 应该是const TuringMachine::TRTable&amp;

std::ostream& operator<<(std::ostream& lhs, const TuringMachine::TRTable& rhs)

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多