所以我试图弄清楚当模板混合时继承是如何工作的。大多数编译器似乎还没有解决这个问题,所以我的语法难度很小。在SkipNode.h中所有奇怪的包括试图让eclipse停止对我大喊大叫。我在尝试在SkipNode.h中声明构造函数时遇到语法错误,所以这里的任何帮助都会有用。
这是node.h
#ifndef NODE_H_
#define NODE_H_
template<class T>
class Node
{
public:
Node(Node<T>* next, Node<T>* prev, T item);
virtual ~Node();
Node* getPrev() { return prev;};
Node* getNext() { return next;};
Node* getItem() { return item;};
void setItem(T item){Node<T>::item = item;};
void setNext(Node* next){Node<T>::next = next;};
void setPrev(Node* prev){Node<T>::prev = prev;};
private:
Node* next;
Node* prev;
T item;
};
这是SkipNode.h,其中skipnode继承自Node。
#include "Node.h"
#include "Node.cpp"
#include "SkipNode.h"
#include "SkipNode.cpp"
template <class T>
class SkipNode: public Node
{
public:
SkipNode(Node<T>* next, Node<T>* prev, Node<T>* child, T item) : Node(next, prev, item);
virtual ~SkipNode();
Node* getChild(){return child;};
void setChild(Node* child){SkipNode::child = child;};
private:
Node *child;
};
#endif /* SKIPNODE_H_ */
答案 0 :(得分:5)
Node
是一个模板,您应该传递模板参数
template <class T>
class SkipNode: public Node<T>
// ^^^
您还需要提供SkipNode
提供的member iniatilizer list
构造函数定义。
更新
SkipNode(Node<T>* next, Node<T>* prev, Node<T>* child, T item)
: Node(next, prev, item);
要:
SkipNode(Node<T>* next, Node<T>* prev, Node<T>* child, T item)
: Node(next, prev, item)
{
}
答案 1 :(得分:-1)
你在node.h中缺少#endif
,你需要为你的基类提供模板参数:
template <class T>
class SkipNode : public Node< T >
....
这种间接级别的存在是为了允许具有不同(或零)模板参数的类从模板类继承。例如:
class Foo : public Node< int >