C++ C++;动态对象数组
我对指针有问题。 我的班级:C++ C++;动态对象数组,c++,arrays,pointers,dynamic,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]
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
}
Zbior::Zbior()
{
此->tablicaCzasteczek=新Czasteczka[n];
对于(int i=0;itablicaCzasteczek[i]=NULL;tablicaCzasteczek[0]=new Czasteczka(X,Y);tablicaCzasteczek[1]=new Czasteczka(X,Y+1)Czasteczka*tablicaCzasteczek
是指向Czasteczka
实例的指针。它也可以是指向Czasteczka
衰减数组的第一个元素的指针。这是理解以下内容的关键部分:
tablicaCzasteczek[0]=NULL;
相当于*tablicaCzasteczek=NULL
。这意味着您试图将NULL分配给Czasteczka
的实例
如果您确实想让代码正常工作,请将tablicazteczek
声明为
Czasteczka **tablicaCzasteczek;
后来
this->tablicaCzasteczek = new Czasteczka*[n];
但如果你不知道自己在做什么,那就麻烦了(我在你的例子中没有看到任何析构函数)
正如其他人所建议的那样,如果你使用它,你的头痛会少很多。如果你使用这样的东西,你会过得更好:
class Czasteczka
{
public:
Czasteczka(int x, int y);
Czasteczka(const Czasteczka &other);
};
std::vector <Czasteczka> zbiorCzasteczek;
或者如果你不是:
zbiorCzasteczek.push_back(Czasteczka(someX, someY));
然后,您可以像使用数组一样访问元素(zbioczasteczek[0]
)。在这种情况下,您不必担心内存管理,因为std::vector
将为您解决这一问题
当然,您也可以将向量作为类的成员。我省略了Zbior
类,因为在您的示例中它没有做任何特殊的事情。Czasteczka
不是指针。将null或new
的结果赋给一个应该做的对象是什么?您能将null
赋给Cza的实例吗steczka
?看起来你对Java很熟悉。如果是这样,你需要忘记很多东西。除非你是为了“教育”而这样做的为此,您可以省去很多麻烦,使用std::vector tablicaCzasteczek;
“…所有指针都是空的”没有指针!您已经有了n
默认构造的Czasteczka
!
zbiorCzasteczek.push_back(Czasteczka(someX, someY));