尝试在网格矩形中创建点列表时出错(初学者)

Errors while trying to create list of points in a grid rectangle (beginner)

本文关键字:列表 出错 初学者 创建 网格      更新时间:2023-10-16

我是C++的初学者,我正在尝试为网格矩形创建一个Rect类,它是使用两个向量创建的:start点(左上角(和dimensions。我想为Rect创建一个名为get_points()的方法,它返回矩形内所有网格点的向量。

以下是我迄今为止所写的内容:

#include <cstdlib>  //I will be using random numbers later
#include <vector>
class Rect {
    private:
        int* start, dimensions;
        int area;
    public:
        Rect(int[], int[]);
        ~Rect();
        std::vector <int> get_points(){
            std::vector <int> points(0);
            for (int i=0; i<area; i++) {
                int point[2] = {start[0]+i%*dimensions[0], start[1]+i/ *dimensions[0]};
                points.push_back(point);
            }
            return points;
        }
};
Rect::Rect(int* start, int* dimensions){
    this -> start = start;
    this -> dimensions = dimensions;
    this -> area = dimensions[0] * dimensions[1];
}
Rect::~Rect(){}

我收到以下错误:

||In member function 'std::vector<int> Rect::get_points()':|
|14|error: invalid types 'int[int]' for array subscript|
|14|error: invalid types 'int[int]' for array subscript|
|15|error: invalid conversion from 'int*' to 'std::vector<int>::value_type {aka int}' [-fpermissive]|
c:program files (x86)codeblocksmingwbin..libgccmingw324.7.1includec++bitsstl_vector.    h|881|error:   initializing argument 1 of 'void std::vector<_Tp,     _Alloc>::push_back(const value_type&) [with _Tp = int; _Alloc =     std::allocator<int>; std::vector<_Tp, _Alloc>::value_type = int]' [-    fpermissive]|
||In constructor 'Rect::Rect(int*, int*)':|
|25|error: invalid conversion from 'int*' to 'int' [-fpermissive]|

在所有这些中,我最想知道是什么导致了invalid types 'int[int]' for array subscript错误。

第一个答案是一个问题,但另一个问题是你有额外的

*

在第14行的尺寸前面。即使标注声明正确,它也没有意义。在按照上面的规定修复声明之后,您还需要删除那些额外的星号。

int* start, dimensions;

不声明2个指针-它是一个指针和1个int。

你想做的事:

int *start, *dimensions;

你需要为每个变量加一颗星。在这种情况下,我更喜欢将恒星放在变量的一侧,而不是类型,以明确这种情况。

此外,您不能在int 的向量中推送int数组

points.push_back(point);

最后,

i%*dimensions[0]

不应具有*。也不应该

i/ *dimensions[0]

更改这些内容应该可以修复您的错误

您没有使用Vectors作为开始和维度,而是使用指向int的指针。请注意,int数组不可分配给Vector,正如您尝试使用push_back((所做的那样。Vector的赋值运算符仅适用于Vector和initializer_list。

为什么不只对x、y、宽度和高度成员使用int呢?您的代码变得简单多了,如果您需要将它们作为Vector返回给某个调用程序,那么您可以在那时构造Vector。或者,如果需要返回这些向量数千次,可以在Rect构造函数中构造它们。