我的指针有问题。
我的课程:
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
类,因为在您的示例中,它没有做任何特别的事情。