c++ - 构造一个内部有结构的类 C++

标签 c++ object nested-class internal-class

所以我有一个类在其私有(private)变量中包含一个结构,在这个结构中我有一个数组,其中数组的大小仅在类的构造之后确定。

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 以及如何调用此结构内的变量?它是否与私有(private)变量相同,所以每当我在 btree class 中的一个函数中使用它时,我都可以称它为 btree.lvl 或者它是 btree->node->lvl 还是有特殊的方法来做到这一点?

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

最佳答案

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

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 类中使用公共(public) getter 和 setter:

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/

相关文章:

android - 是否允许将服务嵌套到应用程序中?

c++ - 反汇编程序 Visual Studio C++

c++ - USP10.DLL 中的内存泄漏

python - 用于在 Python 中删除重复项的迭代器对象

java - 创建在其外部类的构造函数中使用的类的实例

c++ - 在集合中使用嵌套类时出现类型不完整错误

c++ - `int a = 0, b = a` 是否有未定义的行为?

c++ - 反汇编 C++ 中全局变量的 .rodata 部分 (objdump -D)

java - 按名称排序 Object[][] Java

iphone - 如何在 ios 中创建对象的新实例?