friend函数无法访问私有struct

时间:2014-10-16 02:38:16

标签: c++ friend

我试图编写一个友元函数来浏览链表并输出列表中的字符,但由于某种原因,我无法在友元函数中声明节点。这是我的代码:

这是功能:

std::ostream& operator<<(std::ostream& out, LinkedList& list)
  {
      Node *tempNode = nullptr;

      *tempNode = *beginningOfList;
      std::cout << "list: ";
      while(tempNode)
      {
          std::cout << tempNode->letter;
          if (tempNode->next)
              std::cout << ", ";
          tempNode = tempNode->next;
      }
      return out;
  }

这是头文件:

  #ifndef _LINKED_LIST_
  #define _LINKED_LIST_

  #include <ostream>

  class LinkedList
  {
  public:
     LinkedList();
     ~LinkedList();

     void add(char ch);
     bool find(char ch);
     bool del(char ch);

     friend std::ostream& operator<<(std::ostream& out, LinkedList& list);

  private:
      struct Node
      {
          char letter;
          Node *next;
      };
      Node *beginningOfList;
  };

  #endif // _LINKED_LIST_

当我尝试编译它时,我收到消息&#34;节点未在此范围内声明,&#34;以及&#34; * tempNode未在此范围内声明&#34; &#34; * beginOfList未在此范围内声明。&#34;我猜这个问题与名称空间有关,但我真的不确定。

1 个答案:

答案 0 :(得分:1)

说实话。节点等未在该范围内声明。您的运算符是一个全局函数,但这些东西都在LinkedList的范围内。尝试将它们称为LinkedList :: Node,list-&gt; beginningOfList等。