使用类模板需要模板参数列表,嵌套类

时间:2013-11-14 22:54:37

标签: c++ templates generics arraylist nested-forms

我正在尝试通过自己的通用/模板ArrayList实现,我遇到了麻烦。我知道错误来自于没有在参数列表中的某个地方,但对我来说,我无法弄清楚,如果我这样做,我会得到一个不同的错误。为简洁起见,我删除了我无法调试的函数,直到首先调试这个函数。

// // ArrayList.h

#include <iostream>
#include <string>

using namespace std;

template <class T> 
class ArrayList {
private:
    class Node {
        private:
            Node* next;
            Node* prev;
            T* element;
        public:
            Node();
            Node( T* );
            Node( Node* /*new prev*/, T* );
            ~Node();
            void setNext( Node* );
            Node* getNext();
    };
    int size;
    int maxSize;
    int current_index;
    Node* myArrayList;

    Node* curr;
    Node* head;
    Node* tail;
public:
};

“Node * getNext();”的实现在我的cpp文件中。

// // ArrayList.cpp

#include "arraylist.h"

...

template <class T> 
ArrayList::Node* ArrayList::Node::getNext() {
    return this->next;
}

试图插入后面::效果不好......如果我把它放在它之前,节点*就会变得不确定。

template <class T> 
ArrayList<T>::Node* ArrayList::Node::getNext() {
    return this->next;
}

然后我得到“;”预期在“*”之前。

2 个答案:

答案 0 :(得分:2)

试试这个:

template <class T> 
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext()
{
    return this->next;
}

或者在C ++ 11中(Demo):

template <class T> 
auto ArrayList<T>::Node::getNext() -> Node*
{
    return this->next;
}

或仅使用内联定义,建议用于简单访问器。

答案 1 :(得分:1)

您需要定义您的成员函数:

template <class T> 
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext() {
    return this->next;
}