c++ - 从另一个结构中的函数返回结构的困难
问题描述
我正在尝试将矩形转换为多边形,但是当我尝试运行我的转换函数时,我会胡说八道。
这是我的代码:
#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 结构,那是因为一旦我让这个系统与矩形一起工作,我计划添加更多的形状。)
解决方案
xPoints 和 yPoints 在 toPolygon 方法中声明。因此,一旦方法返回,它们就会超出范围。用于创建多边形的指针然后变得未定义。
推荐阅读
- c++ - 在构造函数中使用重载运算符?
- python - 输出我不想输出的东西
- android - 为什么我的 RecyclerView 在 kotlin 中重复行?
- android - Android Studio 文件名必须以 .xml 结尾
- swift - 为什么 coremltools 构建器设置的允许时代被忽略?
- spring-security - 覆盖 /oauth/token 端点的基本身份验证
- python - 为什么 nosy (nose2) 出错但 python 运行测试正常
- mysql - 触发以防止同时类型
- c++ - 指向具有多态性的不同对象的指针集合
- python - 如何在不破坏的情况下合并两个字典