【问题标题】:How do I declare an array of objects within it's own class?如何在它自己的类中声明一个对象数组?
【发布时间】:2013-05-26 09:00:40
【问题描述】:

我不确定如何在自己的类中创建对象数组。例如:

class A { 
public:
  const static int MAX_SIZE = 10;

 private:
  A arrayOfOBjects[MAX_SIZE];


}

我收到一条错误消息,提示“现在允许使用不完整的类型”我该如何处理?如果我在 A 类中声明另一个类的对象数组,它将起作用.. 但是如何在其自己的类中创建对象数组?

【问题讨论】:

  • 一个类不能包含它自己类型的成员。您需要保存一组指向A 的智能指针。
  • @juanchopanza std::array<A, MAX_SIZE> 呢?
  • @PeterWood 那也不应该工作。但是std::vector<A> 可以。
  • @PeterWood 因为std::array 是固定大小的 C 数组的无开销替代品,所以它保存的所有数据都是它的元素。它不能有指向某个动态分配的内存的指针。

标签: c++ arrays class object declare


【解决方案1】:

使用指针。或 shared_ptr 等并动态分配对象

class A { 
public:
  const static int MAX_SIZE = 10;

 private:
  A * arrayOfOBjects[MAX_SIZE];


}

【讨论】:

  • 您在哪里看到共享所有权语义的要求?
【解决方案2】:

你显然不能包含对象本身的实例。这将需要无限量的存储空间;-)

出于同样的原因,您不能包含多个。也许您的意思是数组是一个不会添加到一个实例状态的静态成员?

【讨论】:

    【解决方案3】:

    使用指针可以解决这个问题

    class A { 
    public:
      const static int MAX_SIZE = 10;
      void allocate(){
         arrayOfOBjects=new A[MAX_SIZE];
      }
     private:
      A *arrayOfOBjects;
    };
    

    你可以像下面这样使用它

    A a;
    a.allocate();
    

    【讨论】:

      猜你喜欢
      • 2012-04-22
      • 2018-09-14
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多