如何使用好友函数中的嵌套类?

时间:2019-04-14 19:52:48

标签: c++ inner-classes friend-function name-lookup

就像我得到一个解决方案一样,我还有另一个问题。看,我的模板化链接列表中有一个好友声明,并且需要它作为好友才能到达我的私有嵌套Node结构。

template <typename T>
class LL;

template <typename T>
std::ofstream& operator<< (std::ofstream& output, LL<T>& obj);

template <typename T>
class LL
{
    struct Node
    {
        T mData;
        Node *mNext;

        Node();
        Node(T data);
    };

private:
    Node *mHead, *mTail;
    int mCount;

public:
    LL();
    ~LL();
    bool insert(T data);
    bool isExist(T data);
    bool remove(T data);
    void showLinkedList();
    void clear();
    int getCount() const;
    bool isEmpty();

    friend std::ofstream& operator<< <>(std::ofstream& output, LL& obj);
};

template <typename T>
std::ofstream& operator<<(std::ofstream& output, LL<T>& obj)
{
    Node* tmp;

    if (obj.mHead != NULL)
    {
        tmp = obj.mHead;

        while (tmp != NULL)
        {
            output << tmp->mData << std::endl;
            tmp = tmp->mNext;
         }
     }

    return output;
}

请注意,我需要朋友运算符<<函数定义中的“ tmp-> mData”部分才能使用模板。不幸的是,我现在得到的唯一错误是在朋友函数定义中。尽管它是一个朋友功能,但它不理解“节点”。我很困惑希望有人能帮助我。

1 个答案:

答案 0 :(得分:0)

成为朋友和一般的访问控制不会影响名称查找。 (这有时无济于事,但是正交性很容易推论,并保证更改成员的访问权限不会更改程序的含义(在某些SFINAE情况下除外),只是可能使其不因此,就像成为私人用户并不会阻止您找到名字一样,成为朋友也无济于事。使用

added = {
  ...added,
  ...{
    startDate: "111",
    endDate: "222"
  }
}