我无法弄清楚我的程序出了什么问题。我用头文件中的类声明和成员函数声明,一个.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子句,我还没有完成那部分的工作 - 我只是试图超越当前的错误。
答案 0 :(得分:0)
问题出在朋友声明中:
template <class T>
class IntDLLNode {
friend class IntDLList;
// rest of IntDLLNode here
};
在此声明非模板class IntDLList
为朋友。稍后,您声明一个具有相同名称的模板类;但与你期望的不同,它不会成为IntDLLNode
的朋友。
要解决此问题,请指定朋友类是模板:
template <class U> class IntDLList;
template <class T>
class IntDLLNode {
friend class IntDLList<T>;
// rest of IntDLLNode here
};