簡體   English   中英

在另一個C ++類中創建對象

[英]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的構造函數采用xy那么您甚至可以使用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM