конструирование класса со структурой внутри него c ++ - PullRequest
0 голосов
/ 19 октября 2011

Итак, у меня есть класс, который содержит структуру внутри своих закрытых переменных, и внутри этой структуры у меня есть массив, размер которого определяется только после создания класса.

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.lvl или btree->node->lvl, или есть специальный способ сделать это?

Кроме того, мой массив должен иметь maxNodeElems+1, если кто-то может мне помочь, это было бы очень признательно!

1 Ответ

3 голосов
/ 19 октября 2011

Вы просто объявляете тип, а не фактический объект этого типа.Вам нужно сделать объявление структуры общедоступным, а объект приватным:

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;

Для доступа к членам у вас могут быть открытые методы получения& setters в вашем классе 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();
}
...