如果我有一个二叉搜索树头文件BST.h
,我在其中:
template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;
};
然后我有一个AVL.h
头文件,我想在我的bstNode
文件中使用AVL.h
结构,如下所示:
template<class type>
struct avlNode
{
bstNode<type> bstN;
int height;
avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
: //how would the initialization go here?
};
我的问题是如何使用初始化列表语法初始化avlNode
构造函数?我不确定如何访问bstN
中的成员。
我可以使用结构外的传统定义来实现:
template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h)
{
bstN->info = data;
bstN->lLink = ll;
bstN->rLink = rl;
height = h;
}
但是我想学习使用来自另一个类/结构的对象(bstN
)的成员初始化列表的语法。
答案 0 :(得分:3)
您不能直接在初始化列表中访问成员。这就是为什么你要创建一个构造函数,它需要你需要的参数,并在初始化列表中为它传递值。
例如,
template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;
bstNode( const type &data, bstNode *left, bstNode *right ) :
info( data ), bstNode( left ), bstNode( right )
{
}
};
然后在avlNode中调用此构造函数。
template<class type>
avlNode<type>::avlNode(const type & data, bstNode<type> *ll, bstNode<type> * rl, int h) :
bstN( data, ll, rl ), height( h )
{
}
答案 1 :(得分:2)
bstNode
目前是汇总,因此您可以直接
template<class type>
avlNode<type>::avlNode(const type& data, bstNode<type>* ll, bstNode<type> * rl, int h) :
bstN{data, ll, rl}, height{h}
{
}
提供bstNode
构造函数也可能是一种选择。
答案 2 :(得分:0)
你可以在bstNode
中定义一个构造函数 template <class type>
struct bstNode
{
type info;
bstNode * lLink;
bstNode * rLink;
bstNode(const type & data = type(), bstNode<type> *ll =0, bstNode<type> *rl =0):info(data),llike(ll),rlick(rl){}
};
template<class type>
struct avlNode
{
bstNode<type> bstN;
int height;
avlNode(const type & data, bstNode<type> *ll, bstNode<type> *rl, int h = 0)
: bstN(data,l1,rl),height(h)
};