简体   繁体   中英

friend function can't access private struct

I'm trying to write a friend function to go through a linked list and output the characters in the list, but for some reason I can't declare Nodes within the friend function. Here is my code:

This is the function:

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;
  }

Here is the header file:

  #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_

When I try to compile it, I get the messages "Node was not declared in this scope," as well as "*tempNode was not declared in this scope" and "*beginningOfList was not declared in this scope." I'm guessing the problem has to do with namespaces, but I'm really not sure.

It's telling the truth. Node etc were not declared in that scope. Your operator is a global function but those things are in the scope of LinkedList. Try calling them LinkedList::Node, list->beginningOfList etc.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM