【问题标题】:request for member “…” in “…” which is of non-class type “…” [closed]请求非类类型“...”的“...”中的成员“...” [关闭]
【发布时间】:2013-04-11 22:03:03
【问题描述】:

在我的 c++ 程序中,我有自己的自定义地图,由自定义节点组成,我试图在其中获取“第一”和“第二”值(如 std::map)。我尝试了许多不同的语法,但无济于事。

我知道解决此问题的常用方法是将(*key_Iterator).first 替换为(*key_Iterator)->first,但在这种情况下,我需要能够访问第一种方法中的值。

我在迭代器类中添加了变量,但程序无法识别它们。

template <class T, class P>
class Iterator {
  public:
    Node<T,P>* operator*() { return ptr_; }
  private:
    Node<T,P>* ptr_;
    T first;
    P second;
}

任何关于如何正确实施第一个版本和消除此错误的建议将不胜感激。

【问题讨论】:

  • 呃,你从operator *返回一个指针,所以当然你必须在返回值上使用-&gt;语法......
  • (另外,根本不清楚你到底在问什么。“访问第一种方法中的值”?什么“第一种方法”?什么值?)
  • 我自然发现 -> 语法更有意义。但是由于需要这个程序指南,我使用 (*itr).first 提取第一个值,但我不知道为什么该语法不起作用。
  • 尝试从operator *返回一个引用:Node&lt;T,P&gt; &amp;operator *() { return *ptr_; }
  • @nneonneo:谢谢,我尝试了你的建议,似乎奏效了。

标签: c++ class map


【解决方案1】:

(从评论移开)

解决方案是从您的operator * 返回一个引用,如下所示:

Node<T,P> &operator *() { return *ptr_; } 

【讨论】:

    猜你喜欢
    • 2018-02-20
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多