如何使用另一个结构

时间:2015-07-05 10:18:28

标签: c++ struct constructor member-initialization

如果我有一个二叉搜索树头文件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)的成员初始化列表的语法。

3 个答案:

答案 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)
};