template <class S, class T>
class Pair {
protected:
S data1;
T data2;
public:
...
}
template <class S, class T>
class Node: public Pair<const KeyType, DataType> {
private:
Node<const S, T>* next;
public:
//C'tor
Node(const KeyType& sKey, const DataType& sData) :
data1(sKey), data2(sData), next(NULL) {
}
//Copy C'tor
Node(const Node<KeyType, DataType>& sNode):
data1(sNode.getData1()), data2(sNode.getData2()), next(NULL) {
}
...
};
但由于某种原因,我无法使用Node继承自Pair的data1和data2。 我收到以下错误:
./map.h:24:5: error: use of undeclared identifier 'data1'
data1 = sKey;
^
./map.h:25:5: error: use of undeclared identifier 'data2'
data2 = sData;
^
./map.h:30:4: error: member initializer 'data1' does not name a non-static data member or base class
data1(sNode.getData1()), data2(sNode.getData2()), next(NULL) {
^~~~~~~~~~~~~~~~~~~~~~~
./map.h:30:29: error: member initializer 'data2' does not name a non-static data member or base class
data1(sNode.getData1()), data2(sNode.getData2()), next(NULL) {
^~~~~~~~~~~~~~~~~~~~~~~
我做错了什么?
*这是我的HW分配的一部分,所以我不能使用STL中的pair。
答案 0 :(得分:1)
虽然您可以通过在评论中建议的类名称前缀来为数据成员添加内容;更好的想法是为Pair
:
template <class S, class T>
class Pair {
protected:
S data1;
T data2;
public:
Pair(const S & d1, const T & d2) : data1( d1), data2( d2) { }
...
} ;
然后您可以通过执行以下操作初始化Pair
:
Node(const KeyType& sKey, const DataType& sData) :
Pair(sKey, sData), next(NULL)
...