动态对象数组

C++ Dynamic array of objects

本文关键字:数组 对象 动态      更新时间:2023-10-16

我对指针有问题。我的课程:

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)。Error 4 Error C2679: binary '=':找不到右操作数为'int'的操作符(或者没有可接受的转换)

2)。C2679: binary '=':没有找到右操作数为'Czasteczka *'的操作符(或者没有可接受的转换)谢谢大家的帮助!:)

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将为您处理这个问题。

当然你也可以把vector作为类的成员。我遗漏了你的Zbior类,因为在你的例子中,它没有做任何特别的事情。