0

したがって、プライベート変数内に構造体を保持するクラスがあり、この構造体内に、クラスの構築後にのみ配列のサイズが決定される配列があります。

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ありますか?また、この構造体内の変数をどのように呼び出すのですか?プライベート変数と同じですか?の関数の1つで使用するときはいつでも、それbtree classを呼び出すことができますbtree.lvlか、btree->node->lvlそれとも、これを行うための特別な方法がありますか?

また、私の配列はmaxNodeElems+1誰かが私を助けることができるかどうかのものでなければなりません、それは大いにありがたいです!

4

1 に答える 1

3

その型の実際のオブジェクトではなく、型を宣言しているだけです。構造体宣言を公開し、オブジェクトを非公開にする必要があります。

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();
}
于 2011-10-19T08:43:34.550 に答える