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显然是