返回指向受保护内部 class 元素的指针
Returning pointer to protected inner class element
我有一个通用链表 class,其中包含一个受保护的内部 class,其中包含 ListElements(节点)。在我的链表 class 中,我想创建一个 returns 指向给定参数之前的列表元素的指针的函数。我无法弄清楚如何在通用模板中正确定义和实现这样的功能 class。
这是 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.
}
您不能在头文件中声明模板方法,然后在 cpp 文件中实现它。模板方法必须在头文件中实现。您可以在 class 中声明您的方法,也可以在文件中进一步实现它们。当在 class 下面实现时,您的示例方法将如下所示
template<typename Type>
LinkedList<Type>::ListElement *LinkedList<Type>::ListElement::getPrevious(ListElement *target){
//...
}
我有一个通用链表 class,其中包含一个受保护的内部 class,其中包含 ListElements(节点)。在我的链表 class 中,我想创建一个 returns 指向给定参数之前的列表元素的指针的函数。我无法弄清楚如何在通用模板中正确定义和实现这样的功能 class。
这是 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.
}
您不能在头文件中声明模板方法,然后在 cpp 文件中实现它。模板方法必须在头文件中实现。您可以在 class 中声明您的方法,也可以在文件中进一步实现它们。当在 class 下面实现时,您的示例方法将如下所示
template<typename Type>
LinkedList<Type>::ListElement *LinkedList<Type>::ListElement::getPrevious(ListElement *target){
//...
}