这是家庭作业的一部分,但我已尽可能减少问题。所提供的代码实际上并没有做任何事情,只是创建了一些对象,所以我只能解决纯语言问题。
我想我的问题是:一个模板类是否可以创建另一个相同模板类型的类?
任务是有一个 main.cc 如下:
#include "linkedlist.hh"
int main()
{
LinkedList<int> aList;
ListIterator elements = aList.iterator(); // if commented out, then no error
}
我有以下 linkedlist.hh:
template <typename T> class LinkedList;
template <typename T> class ListIterator;
template <typename T>
class LinkedList {
public:
ListIterator<T> iterator();
};
template <typename T>
ListIterator<T> LinkedList<T>::iterator() {
return new ListIterator<T>;
}
template <typename T>
class ListIterator {
};
使用 g++-4.6 会出现以下错误:
main.cc: In function ‘int main()’:
main.cc:6:18: error: missing template arguments before ‘elements’
main.cc:6:18: error: expected ‘;’ before ‘elements’
和 clang++-2.9 类似的错误:
main.cc:6:5: error: cannot refer to class template 'ListIterator' without a
template argument list
ListIterator elements = list.iterator();
^
In file included from main.cc:1:
./linkedlist.hh:16:11: note: template is declared here
class ListIterator {
更新:是的,如果我可以更改 main.cc,那么我可以执行以下操作,但我认为这不是作业的内容。
主.cc
#include "linkedlist.hh"
int main()
{
LinkedList<int> aList;
ListIterator<int> elements = aList.iterator();
}
和linkedlist.hh
template <typename T> class LinkedList;
template <typename T> class ListIterator;
template <typename T>
class LinkedList {
public:
ListIterator<T> iterator();
};
template <typename T>
ListIterator<T> LinkedList<T>::iterator() {
ListIterator<T> anIterator;
return anIterator;
}
template <typename T>
class ListIterator {
};
最佳答案
不应该是ListIterator<int>
吗? ?
关于c++ - 缺少模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7564113/