У меня проблемы с выяснением, что не так с моей программой. Я построил его с помощью объявлений классов и объявлений функций-членов в заголовочном файле, определений функций-членов в одном файле .cpp, а затем у меня есть программа основного драйвера в main.cpp. Я поместил их все в один файл на ideone, чтобы я мог разместить программу здесь:
Ошибка, показанная на ideone, действительно является ошибкой, которую показывает моя IDE при сборке. Может кто-то указать, что я делаю не так?
Ошибка:
prog.cpp: In instantiation of ‘IntDLLNode<int>’:
prog.cpp:56: instantiated from ‘void IntDLList<T>::addToDLLHead(const T&) [with T = int]’
prog.cpp:215: instantiated from here
prog.cpp:8: error: template argument required for ‘struct IntDLList’
Line 56: head = new IntDLLNode<T>(el,head,NULL);
Line 215: dll.addToDLLHead(numero);
Line 8: class IntDLLNode {
Вы можете игнорировать предложение try / catch, я еще не закончил работу над этой частью — я просто пытаюсь обойти текущую ошибку.
Проблема в декларации друга:
template <class T>
class IntDLLNode {
friend class IntDLList;
// rest of IntDLLNode here
};
Здесь вы объявляете не шаблон class IntDLList
быть другом. Позже вы объявляете шаблон класс с тем же именем; но в отличии от ожидаемого он не станет другом IntDLLNode
,
Чтобы это исправить, укажите, что класс Friend является шаблоном:
template <class U> class IntDLList;
template <class T>
class IntDLLNode {
friend class IntDLList<T>;
// rest of IntDLLNode here
};
Других решений пока нет …