【问题标题】:no operator "<<" matches没有运算符“<<”匹配
【发布时间】:2017-02-28 09:27:21
【问题描述】:
#include<iostream>
#include<set>
#include<unordered_map>

using namespace std;

typedef long Node;

typedef unordered_map<Node, set<Node> > Dothi;

Dothi g;

while (n--)
{
    Node u, i;
    int choose;
    cin >> choose;
    if (choose == 1)
    {
        cin >> u >> i;
        cout << (Lienke(u, i) ? "TRUE" : "FALSE");
    }

    checkCase2 = false;

    if (choose == 2)
    {
        cin >> u;
        for (  auto n = g[u].begin(); n!=g[u].end();++n)
        {
            cout << n <<" "; //Error here, cant cout n
            checkCase2 = true;
        }
  • 我无法在以下行中找到:“for(auto n = g[u].begin(); n!=g[u].end();++n )”。

  • 它说:“没有运算符“

  • 我可以使用c++2003

【问题讨论】:

  • n 是一个迭代器。尝试使用 *n: cout
  • 谢谢,我试过了,但是系统说:“ISO C++ 禁止声明没有类型的‘n’”。
  • @MartinHoang C++03 没有auto
  • 您还必须为您的地图键入定义迭代器,而不是使用 auto。如果您迁移到 C++11,您将同时拥有 auto 以及新的 for (auto& n : g[u]) 循环,这更容易编写,并且将 n 作为变量本身和不是迭代器。
  • 它有 auto,但在 c++03 中它是一个存储类说明符,而不是作为无效关键字。

标签: c++ dictionary c++03


【解决方案1】:

如果您想要在给定的迭代器下打印一个值,那么您必须在其上使用解引用运算符:

cout << *n <<" ";
        ^ ~~~~ !

【讨论】:

    【解决方案2】:

    您正在尝试打印迭代器 n。由于这没有实现,你会得到一个编译器错误。我认为你是什么以下内容:

    std::cout << std::distance(g[u].begin(), n) << std::endl;
    

    这将打印您正在使用的索引。您需要包含标题&lt;iterator&gt;

    如果您要在该索引处打印元素(node aka long),请使用取消引用运算符(*),如下所示:

    std::cout << *n << std::endl;
    

    更新:

    由于您使用的是 C++03,所以auto 关键字不允许用于类型推导。然后您应该使用(在 for 循环中声明 n 时):

    Dothi::iterator n = g[u].begin();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 2020-07-25
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多