返回指向受保护的内部类元素的指针

Posted

技术标签:

【中文标题】返回指向受保护的内部类元素的指针【英文标题】:Returning pointer to protected inner class element 【发布时间】:2015-06-21 00:27:00 【问题描述】:

我有一个通用的 Linked-List 类,它包含一个包含 ListElements(节点)的受保护内部类。在我的 Linked-List 类中,我想创建一个函数,该函数返回一个指向给定参数之前的 List-Element 的指针。我无法弄清楚如何在通用模板类中正确定义和实现这样的函数。

这里是 LinkedList.h 代码。

template <typename Type>
class LinkedList

    public:
        LinkedList();
        LinkedList(const LinkedList &src);
        ~LinkedList();

        void insert(const Type &item, int);
        void remove();
        Type retrieve() const;
        int  gotoPrior();
        int  gotoNext();
        int  gotoBeginning();
        void clear();
        int  empty() const;
        void printList();
    protected:
        class ListElement
        
            public:
                ListElement(const Type &item, ListElement* nextP):
                    element(item), next(nextP) 
                Type element;
                ListElement* next;
        ;
        ListElement *head;
        ListElement *cursor;
;

我想实现这样的功能。牢记:我已经知道如何正确编码函数,我不确定如何在 LinkedList.h 中定义它并在 LinkedList.cpp 中实现它

ListElement *LinkedList::ListElement getPrevious(ListElement *target)
     //where a list element inside the list is passed and this returns
     //the node previous to that.

【问题讨论】:

你为什么要重新发明***。标准::列表? 这是一次学习体验。在现实世界的应用程序中,我将使用 std::List 但现在我想学习这种情况的机制和正确的语法。 你说你已经知道如何正确编码函数是什么意思? 我的意思是我知道如何找到上一个节点,但是我不知道如何正确定义函数头。 【参考方案1】:

您不能在头文件中声明模板方法,然后在 cpp 文件中实现它。模板方法必须在头文件中实现。您可以在类中声明您的方法,也可以在文件中进一步实现它们。当在类下面实现时,您的示例方法将如下所示

template<typename Type>
LinkedList<Type>::ListElement *LinkedList<Type>::ListElement::getPrevious(ListElement *target)
    //...

【讨论】:

以上是关于返回指向受保护的内部类元素的指针的主要内容,如果未能解决你的问题,请参考以下文章

Java:从内部类访问受保护的字段

命名空间内受保护的内部类编译没有错误

受保护的内部[重复]

cpp(第十三章)

获取指向基类受保护成员函数的函数指针

如何在 C# 中使属性受保护和内部?