Это часть домашнего задания, но я по возможности уменьшил проблему.Представленный код на самом деле ничего не делает, просто создает некоторые объекты, так что я перешел к чисто языковым проблемам.
Я думаю, что мой вопрос: возможно ли для класса шаблона создать другой класс того же самогоТип шаблона?
Назначение должно иметь main.cc следующим образом:
#include "linkedlist.hh"
int main()
{
LinkedList<int> aList;
ListIterator elements = aList.iterator(); // if commented out, then no error
}
У меня есть следующие ссылки для linkslist.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, тогдаЯ мог бы сделать следующее, но я не думаю, что это то, что является назначением.
main.cc
#include "linkedlist.hh"
int main()
{
LinkedList<int> aList;
ListIterator<int> elements = aList.iterator();
}
и connectedlist.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 {
};