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

问题描述 投票:3回答:1

正如我得到一个解决方案,我有另一个问题。看,我在我的模板化链表中有一个朋友声明,我需要让它作为朋友来访问我的私有嵌套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;
}

请注意,我需要友元操作符<< function definition中的“tmp-> mData”部分才能使用模板。不幸的是,我现在遇到的唯一错误是在友元函数定义中。它不理解'Node',尽管它是朋友的功能。我很困惑。希望可以有人帮帮我。

c++ inner-classes friend-function name-lookup
1个回答
0
投票

作为朋友和访问控制通常不会影响名称查找。 (这有时是无益的,但正交性很容易推理,并保证更改成员的访问权限不会改变程序的含义(除了在某些SFINAE情况下),只是可能使它不能编译。)所以就像存在一样私人不会阻止找到一个名字,作为朋友不会帮助找到它。使用

typename LL<T>::Node *tmp;
© www.soinside.com 2019 - 2024. All rights reserved.