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

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:二进制'=':未找到采用类型为'int'的右侧操作数的运算符(或没有可接受的转换)

2.)错误6错误C2679:二进制'=':未找到采用'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会为您处理。

当然,您也可以将向量作为类的成员。我省略了您的Zbior类,因为在您的示例中,它没有做任何特别的事情。

09-06 17:54