因此,我有一个在其私有变量中包含一个结构的类,并且在此结构中,我有一个数组,其中数组的大小仅在构造类之后确定。

template <typename T>
class btree {

  public:
    btree(size_t maxNodeElems);
    ~btree() {}

  private:
    // The details of your implementation go here
    size_t maxNodeElems;
    struct node {

      list <T> elements;
      node lvl[];

    };

};


首先,我是否必须使其具有node * lvl以及如何在此结构内调用变量?它是否与私有变量相同,所以每当在btree class中的一个函数中使用它时,我都可以将其称为btree.lvlbtree->node->lvl还是有一种特殊的方法?

另外,如果有人可以帮助我,我的数组必须为maxNodeElems+1,将不胜感激!

最佳答案

您只是在声明类型,而不是该类型的实际对象。您需要将结构声明设为公共,将对象设为私有:

template <typename T>
class btree {

  public:
    btree(size_t maxNodeElems);
    ~btree() {}

    struct node {   // <- this is just a declaration of a private inner-class
      list <T> elements;
      node lvl[];
    };

  private:
    size_t maxNodeElems;
    node*  memberNode;   // <- this is the actual private member

};


您可以从外部创建该类型的对象:

btree<A>::node* n = new btree<A>::node;


对于访问成员,您可以在btree类中使用公共获取器和设置器:

class btree {
public:
   node* getNode()
   {
      return memberNode;
   }
   //...........
   //...........
};


编辑:

以下对我有用(初始化成员):

template <typename T>
class btree {

  public:
    btree()
    {
       memberNode = new btree<T>::node;
    }
    ~btree() {}

    void init()
    {
       memberNode->lvl = new node[10];
    }

    struct node {   // <- this is just a declaration of a private inner-class
      list <T> elements;
      node* lvl;
    };

  private:
    size_t maxNodeElems;
    node*  memberNode;   // <- this is the actual private member

};

int _tmain(int argc, _TCHAR* argv[])
{
   btree<char> b;
   b.init();
}

关于c++ - 构造一个内部带有结构的类c++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7818622/

10-11 22:35
查看更多