C ++动态对象数组

时间:2014-05-04 17:34:08

标签: c++ arrays pointers dynamic

指针有问题。 我的课程:

Zbior{
   Czasteczka* tablicaCzasteczek;  //it will be a pointer to dynamic array
   Zbior();
}
Czasteczka{
   Czasteczka();
   Czasteczka(int x, int y);
}

Zbior的构造函数:

Zbior::Zbior()
{
   this->tablicaCzasteczek = new Czasteczka[n];
   for( int i=0 ; i<n ; i++ )
   {
      this->tablicaCzasteczek[i] = NULL;   <-- here is 1st error
   }
   this->tablicaCzasteczek[0] = new Czasteczka(X, Y);   <-- 2nd error
   this->tablicaCzasteczek[1] = new Czasteczka(X, Y+1); <-- same error as above
}

上面的代码必须创建动态数组并将第一个和第二个对象添加到此数组中。

错误:

1。)错误4错误C2679:二进制&#39; =&#39; :找不到哪个运算符采用类型&#39; int&#39;的右手操作数。 (或者没有可接受的转换)

2。)错误6错误C2679:二进制&#39; =&#39; :找不到哪个操作符采用类型&#39; Czasteczka *&#39;的右手操作数。 (或者没有可接受的转换) 感谢所有帮助! :)

1 个答案:

答案 0 :(得分:2)

Czasteczka *tablicaCzasteczek是指向Czasteczka实例的指针。它也可以是一个指向衰减数组Czasteczka的第一个元素的指针。这是理解的关键部分:

tablicaCzasteczek[0] = NULL;相当于*tablicaCzasteczek = NULL。这意味着您正尝试将NULL分配给Czasteczka实例

如果您真的想让代码正常工作,请将tablicaCzasteczek声明为

Czasteczka **tablicaCzasteczek;

以及稍后

this->tablicaCzasteczek = new Czasteczka*[n];

但如果你不知道自己在做什么,那就是在麻烦(我的例子中没有看到任何析构函数)。

正如其他人所建议的那样,如果你使用std::vector,你的头痛就会少得多。你会用这样的东西好多了:

class Czasteczka
{
public:
    Czasteczka(int x, int y);
    Czasteczka(const Czasteczka &other);
};

std::vector <Czasteczka> zbiorCzasteczek;

然后,如果您使用的是C ++ 11:

zbiorCzasteczek.emplace_back(someX, someY);

或者如果你不是:

zbiorCzasteczek.push_back(Czasteczka(someX, someY));

然后,您可以像使用数组(zbiorCzasteczek[0])一样访问元素。在这种情况下,您不必担心内存管理,因为std::vector会为您处理。

当然你也可以将矢量作为你的班级成员。我遗漏了你的Zbior课程,因为在你的例子中它没有特别做任何事情。