【问题标题】:Passing array into constructor parameter and creating an array of structs using the value of the array将数组传递给构造函数参数并使用数组的值创建一个结构数组
【发布时间】:2021-12-31 03:42:16
【问题描述】:

我目前正在为将被绘制到屏幕上的多边形编写一个类。然而,我的问题是,我无法弄清楚如何从数组数组(对于每个顶点的 x 和 y 保存整数)创建一个结构数组。我通过构造函数传递这个数组。我认为我的错误与尝试将指针作为整数传递有关,尽管经过危险的研究,我似乎无法弄清楚如何解决我的错误。我来自动态类型语言(主要是 Js 和 Python)的背景,这是我第一个使用静态类型语言的大型项目。非常感谢任何帮助。

struct Point {
    int x , y;
};
class Polygon
{
private:
    Point centre;

    Polygon(int x, int y, int vertices[]) {
        centre = {x, y};
        struct Point points[sizeof(vertices)/sizeof(vertices[0])] = {vertices};
    }

    //etc....
};
//Example of how it will be called in main.cpp
int main{
    Polygon polygon(0, 0, {{5,5}, {-5,5}, {5,-5}, {-5,-5}} );
}

【问题讨论】:

  • 根据你想如何称呼它看起来你想要一个 std::initializer_list<Point> 作为第三个参数
  • 然而,代码中还有很多其他问题,例如构造函数是私有的,并且 struct Point vertices[sizeof(vertices)] = {vertices}; 行在 C++ 中没有任何意义(并且不会编译,因为您对两个不同的事物使用相同的变量名)
  • sizeof(vertices) 没有给你元素的数量。其次,VLA 不是标准的 C++。第三,使用向量。
  • 如果 VLA 在 C++ 中不是标准的,你会建议我如何解决我的问题? @ChrisMM
  • 那就是“使用向量”部分。

标签: c++ arrays oop pointers


【解决方案1】:

这个怎么样?

struct Point {
    int x , y;
};

class Polygon
{
private:
    Point m_centre;
    std::vector <Point> m_vec_vertices;
public:

    Polygon(const Point& centre, const std::vector<Point> &vertices)
    :m_centre(centre), m_vec_vertices(vertices) { }

    //etc....
};

int main(){
    Polygon polygon({0, 0}, {{5,5}, {-5,5}, {5,-5}, {-5,-5}} );
}

您在Polygon 构造函数中定义了一个点类,为什么不使用它而不是xy 对吗?

【讨论】:

    猜你喜欢
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多