0

我正在尝试重载 ostream << 运算符class List

class Node
{
public:
    int data;
    Node *next;
};
class List
{
private:
    Node *head;
public:
    List() : head(NULL) {}
    void insert(int d, int index){ ... }
 ...}

据我所知(重载 ostream 函数)必须在类之外编写。所以,我这样做了:

ostream &operator<<(ostream &out, List L)
{
    Node *currNode = L.head;
    while (currNode != NULL)
    {
        out << currNode->data << " ";
        currNode = currNode->next;
    }
    return out;
}

但是当然,这不起作用,因为成员Node headprivate. 在这种情况下,除了转向,还有哪些方法可以Node *headpublic

4

2 回答 2

1

您可以通过为重载的内部类定义添加朋友声明operator<<来解决此问题,如下所示:

class List
{
   //add friend declaration
   friend std::ostream& operator<<(std::ostream &out, List L);
   
   //other member here
};
于 2022-02-05T10:32:08.927 回答
1

在类内声明函数签名并将其标记为friend,然后根据需要在类外定义它。

于 2022-02-05T10:46:41.567 回答