【问题标题】:Dynamic array of a custom class in a copy constructor C++复制构造函数 C++ 中自定义类的动态数组
【发布时间】:2018-11-13 08:51:40
【问题描述】:

我试图通过在我的另一个类中定义这个类的指针来创建一个类的动态数组,然后当我创建第二个类的复制构造函数时,IDE 告诉我指针类型是不兼容

class myClass2 {
private:
        int *size;
        string name;
        myClass1 *list;
        ...
public:
       myClass2(const char &name,const int size);
       ...
};

myClass2::myClass2(const char &name,const int size){
...
       this->size = new int(size);
       myClass1 * pArray[size]; 
       for(int i = 0; i < size; i++){
           pArray[i] = new myClass1();
       }
       list = pArray; //FIXME:incompatible pointer type
};

【问题讨论】:

  • list 是 myClass1* 类型,pArray 是 myClass2** 类型。您想在这里实现什么目标?
  • 连同上面的评论,你为什么在这里把 size 当作动态成员? this->size = new int(size); 希望这个 myClass2 * pArray[size]; 是一个错字。
  • 这个for(int i = 0; i&gt; size; i++)没有意义,或许你应该先从一本好的C++书入手。
  • @JeJo 是的,我修好了
  • 为什么? @KillzoneKid

标签: c++ arrays class dynamic


【解决方案1】:

你写过:

myClass1 *list;

这意味着list 的值将是 myClass1 对象的地址。 在myClass2 的构造函数中,您写道:

list = pArray;

但是pArray 不是myClass1 对象的地址。你的pArray 是一个用于包含myClass2* 的数组。所以你得到了错误incompatible pointer type

【讨论】:

  • @Diego Simonelli。你明白我的想法吗!
  • 那我该怎么做才能修复它?
  • @DiegoSimonelli 请等我几分钟。
  • 我刚刚修正了一些错别字。我的意思是创建一个 class1 数组,然后将其指向列表。对此感到抱歉
  • 你可以分配list = pArray[0]或者list = pArray[1]等等。
【解决方案2】:

您正试图从 MyClass1 类型指向 MyClass2 类型。这就是为什么存在不兼容的类型错误。为 MyClass2 扩展 MyClass1 并使用多态性。 Myclass1 * pArray[size];

PS : 建议使用栈来存储变量,除非它不是本地的。你可以这样做, int size; this->size = size;

【讨论】:

    猜你喜欢
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 2011-11-25
    相关资源
    最近更新 更多