0

我正在尝试通过自己的通用/模板 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;
}

尝试在 :: 后面插入效果不佳...如果我将 Node* 放在它之前,它就会变得未定义。

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

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

4

2 回答 2

2

尝试这个:

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

或在 C++11(演示)中:

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

或者只使用内联定义,推荐用于简单访问器。

于 2013-11-14T23:04:35.587 回答
1

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

template <class T> 
typename ArrayList<T>::Node* ArrayList<T>::Node::getNext() {
    return this->next;
}
于 2013-11-14T23:01:53.010 回答