初始化继承的成员数据

时间:2014-01-09 04:13:30

标签: c++

我有以下课程:

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。

1 个答案:

答案 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)
  ...