Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用类模板需要模板参数列表,该怎么办?_C++_Templates - Fatal编程技术网

C++ 使用类模板需要模板参数列表,该怎么办?

C++ 使用类模板需要模板参数列表,该怎么办?,c++,templates,C++,Templates,我有一个我正在创建的模板类 template <class T> class ArrayLLN { private: ArrayLLN *next; T *item; public: ArrayLLN(T i, ArrayLLN *n); ~ArrayLLN(); void insert(T n, int i, int m); ArrayLLN *getnext(); T *getitem();

我有一个我正在创建的模板类

template <class T> class ArrayLLN {
     private:
     ArrayLLN *next;
     T *item;
public:
     ArrayLLN(T i, ArrayLLN *n);
     ~ArrayLLN();
     void insert(T n, int i, int m);
     ArrayLLN *getnext();
     T *getitem();
     T remove(int i, int m);
};
并写为

template <class T> ArrayLLN ArrayLLN <T> :: *getnext(){return next;}
template ArrayLLN ArrayLLN::*getnext(){return next;}
如目前所写,我收到错误“error C2955:'ArrayLLN':使用类模板需要模板参数列表”


以下配置产生了其他错误

template <class T> ArrayLLN *ArrayLLN <T> :: getnext(){return next;)
template ArrayLLN*ArrayLLN::getnext(){return next;)
如何修复此错误

这可能是这些的宣言吗

template <class T> T *ArrayLLN<T>  :: getitem(){return item;}
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; }
template <class T> T ArrayLLN <T> :: remove (int i, int m){
    T *tmp == NULL;
    if(i == m && next){
        tmp = item;
        item = next ->getitem();
        next = next->getnext();
    }
    else if (i > m){
        m++;
        tmp = next -> remove(i,m);
    }
    return tmp; 
 }
template T*ArrayLLN::getitem(){return item;}
模板ArrayLLN*ArrayLLN::getnext(){return next;}
模板T ArrayLLN::remove(int i,int m){
T*tmp==NULL;
如果(i==m&&next){
tmp=项目;
item=next->getitem();
下一步=下一步->获取下一步();
}
否则如果(i>m){
m++;
tmp=下一步->删除(i,m);
}
返回tmp;
}

正确的语法如下:

                        //  +-- argument list here                    +-- bracket
                        //  v                                         v not paren
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; }
/+--此处的参数列表+--括号
//不是帕伦
模板ArrayLLN*ArrayLLN::getnext(){return next;}

正确的语法如下:

                        //  +-- argument list here                    +-- bracket
                        //  v                                         v not paren
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; }
/+--此处的参数列表+--括号
//不是帕伦
模板ArrayLLN*ArrayLLN::getnext(){return next;}

正确的语法如下:

                        //  +-- argument list here                    +-- bracket
                        //  v                                         v not paren
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; }
/+--此处的参数列表+--括号
//不是帕伦
模板ArrayLLN*ArrayLLN::getnext(){return next;}

正确的语法如下:

                        //  +-- argument list here                    +-- bracket
                        //  v                                         v not paren
template <class T> ArrayLLN<T> *ArrayLLN<T>::getnext() { return next; }
/+--此处的参数列表+--括号
//不是帕伦
模板ArrayLLN*ArrayLLN::getnext(){return next;}

在类内部,ArrayLLN是一个注入的类名,允许您省略模板参数列表。在类外部,您必须提供它。其次,星号位于错误的位置

template <class T> ArrayLLN<T>* ArrayLLN <T> :: getnext(){return next;}
template ArrayLLN*ArrayLLN::getnext(){return next;}

在类内部,ArrayLLN是一个注入的类名,允许您省略模板参数列表。在类外部,您必须提供它。其次,星号位于错误的位置

template <class T> ArrayLLN<T>* ArrayLLN <T> :: getnext(){return next;}
template ArrayLLN*ArrayLLN::getnext(){return next;}

在类内部,ArrayLLN是一个注入的类名,允许您省略模板参数列表。在类外部,您必须提供它。其次,星号位于错误的位置

template <class T> ArrayLLN<T>* ArrayLLN <T> :: getnext(){return next;}
template ArrayLLN*ArrayLLN::getnext(){return next;}

在类内部,ArrayLLN是一个注入的类名,允许您省略模板参数列表。在类外部,您必须提供它。其次,星号位于错误的位置

template <class T> ArrayLLN<T>* ArrayLLN <T> :: getnext(){return next;}
template ArrayLLN*ArrayLLN::getnext(){return next;}

不幸的是,这仍然给我提供了相同的错误。奇怪。你能提供一个简单的例子让我重现错误吗?我提供了其余的方法声明,并在我的原始帖子中添加了其他部分。这就是我到目前为止为这个类提供的所有代码。我对模板非常陌生,所以我完全不知道该怎么做。编辑:我想我我不太确定如何减少代码量,因为我觉得我的代码量非常少我能看到的错误是
T*tmp==NULL;
必须是
T*tmp=NULL
,而
remove
必须返回一个指针以其编写的方式工作。我的编译器毫无怨言地吃掉了其余的部分。因此我发现错误实际上来自不同的文件。今晚我显然很累。这显然是s提供了错误。模板类ArrayLL{private:ArrayLLN*head;int size;}我来确定将ArrayLLN*head;更改为Arrayllnu,幸运的是,这仍然给我提供了相同的错误。奇怪。你能提供一个这样我就可以重现错误吗?我提供了其余的方法声明,并在我的原始帖子中添加了其他部分。这就是我到目前为止为这个类编写的所有代码。我对templ真的很陌生编辑:我想我不太确定如何减少代码量,因为我觉得我一开始只有非常少的代码。唯一的(编译时)我能看到的错误是
T*tmp==NULL;
必须是
T*tmp=NULL
,而
remove
必须返回一个指针以其编写的方式工作。我的编译器毫无怨言地吃掉了其余的部分。因此我发现错误实际上来自不同的文件。今晚我显然很累。这显然是s提供了错误。模板类ArrayLL{private:ArrayLLN*head;int size;}我来确定将ArrayLLN*head;更改为Arrayllnu,幸运的是,这仍然给我提供了相同的错误。奇怪。你能提供一个这样我就可以重现错误吗?我提供了其余的方法声明,并在我的原始帖子中添加了其他部分。这就是我到目前为止为这个类编写的所有代码。我对templ真的很陌生编辑:我想我不太确定如何减少代码量,因为我觉得我一开始只有非常少的代码。唯一的(编译时)我能看到的错误是
T*tmp==NULL;
必须是
T*tmp=NULL
,而
remove
必须返回一个指针以其编写的方式工作。我的编译器毫无怨言地吃掉了其余的部分。因此我发现错误实际上来自不同的文件。今晚我显然很累。这s显然是