首页 > 解决方案 > 从另一个结构中的函数返回结构的困难

问题描述

我正在尝试将矩形转换为多边形,但是当我尝试运行我的转换函数时,我会胡说八道。

这是我的代码:

#include <iostream>

struct Polygon {
    int nPoints;
    int* xPoints;
    int* yPoints;

    Polygon(int nPoints, int* xPoints, int* yPoints) :
        nPoints(nPoints), xPoints(xPoints), yPoints(yPoints) {
    }
};

struct Shape {
    virtual Polygon toPolygon() = 0;
};

struct Rectangle : public Shape {
    int x;
    int y;
    int width;
    int height;

    Rectangle(int x, int y, int width, int height) :
        x(x), y(y), width(width), height(height) {
    }

    virtual Polygon toPolygon() {
        int xPoints[] = {x, x + width, x + width, x};
        int yPoints[] = {y, y, y + height, y + height};
        return Polygon(4, xPoints, yPoints);
    }
};

int main (int argc, char** argv) {
    Rectangle rect = Rectangle(14, 8, 45, 64);
    Polygon polygon = rect.toPolygon();
    for (int i = 0; i < polygon.nPoints; i++) {
        std::cout << polygon.xPoints[i] << ", " << polygon.yPoints[i] << std::endl;
    }
}

这是输出:

14, 8
32588, 32588
6299872, -383502305
0, 32588

输出的点与我定义的矩形上的点完全不同,如果有人能告诉我原因,我将不胜感激。

(如果有人想知道为什么存在 Shape 结构,那是因为一旦我让这个系统与矩形一起工作,我计划添加更多的形状。)

标签: c++

解决方案


xPoints 和 yPoints 在 toPolygon 方法中声明。因此,一旦方法返回,它们就会超出范围。用于创建多边形的指针然后变得未定义。


推荐阅读