Search code examples
c++friend

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.


Solution

  • 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.