[英]Creating an object within another class C++
我遇到了一个我完全无法理解的奇怪的运行时错误。 我正在创建我的Circle类的对象,该对象具有以下默认构造函数:
Circle::Circle()
{
this->radius = 0;
this->center->setX(0);
this->center->setY(0);
}
正在初始化的变量是:
private:
double radius;
Point *center;
};
当我尝试创建类圆的对象时,出现运行时错误。 现在,只有动态声明Point对象时,才会出现此错误。 我的语法有什么问题吗? 当我像这样在Circle类中声明Point时:
Point center;
并像这样初始化它:
Circle::Circle()
{
this->radius = 0;
this->center.setX(0);
this->center.setY(0);
}
有用。 动态创建对象时为什么会出现这些错误? 我可以不像第一个示例那样使用两个“->”吗?
这是我的第一篇文章,我希望这不是一个太愚蠢的问题。 提前致谢。
你最好用
Circle {
private:
double radius;
Point center; // <<<<<<< No pointer here
};
您不需要指针。
当前代码的问题是没有为指针变量分配内存。 我也不建议这样做(例如,使用center = new Point()
)。 如前所述,没有必要。
另外,您不需要this->
访问班级成员。 只需在构造函数中使用成员初始化器列表即可:
Circle::Circle() : radius(0), center(0,0) {
}
center
是一个指针。 如果您没有为其分配任何内存,那么您将无法访问它,因为它没有指向有效的对象。 为了获得有效的对象,我们将使用
Circle::Circle() : radius(0), center(new Point)
{
center->setX(0);
center->setY(0);
}
如果Point
的构造函数采用x
和y
那么您甚至可以使用
Circle::Circle() : radius(0), center(new Point(0, 0)) {}
但是,我确实必须问您在这里是否甚至需要一个指针。 如果没有的话,你可能有
Circle::Circle() : radius(0),
{
center.setX(0);
center.setY(0);
}
// or
Circle::Circle() : radius(0), center(0, 0) {}
发生问题的原因是center
是没有分配内存的指针。 由于不存在这样的对象,
Circle::Circle()
{
this->radius = 0;
this->center = new Point; //call the appropriate Point constructor
this->center->setX(0); //now these are valid
this->center->setY(0);
}
还要注意,因为center
实际上是实现中的指针, center.setX(0)
无效,您应该center.setX(0)
center->setX(0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.