我得到一个奇怪的运行时错误,我根本无法理解。 我正在创建我的类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);
}
有效。 为什么在动态创建对象时会出现这些错误?我可以不使用两个" - >"就像在第一个例子中一样?
这是我的第一篇文章,我希望这不是一个太愚蠢的问题。 提前谢谢。
答案 0 :(得分:1)
你最好使用
<Target Name="BeforeBuild" Condition="Exists('$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config')">
<Delete Files="$(ProjectDir)\obj\Debug\Package\PackageTmp\web.config" />
</Target>
你不需要指针。
当前代码的问题在于没有为指针变量分配内存。我也不建议这样做(例如Circle {
private:
double radius;
Point center; // <<<<<<< No pointer here
};
)。如上所述,没有必要。
此外,您不需要center = new Point()
来访问班级成员。只需在构造函数中使用成员初始值设定项列表:
this->
答案 1 :(得分: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) {}
答案 2 :(得分: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)
而不是