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

时间:2015-07-09 18:33:42

标签: c++

我是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)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\stl_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错误的原因。

3 个答案:

答案 0 :(得分:1)

int* start, dimensions;

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

你想这样做:

int *start, *dimensions;

您需要为每个变量添加一颗星。在这种情况下,我更倾向于将恒星放在变量的一边,而不是类型,以使这种情况明确。

另外,你不能在一个int的向量中推送一个int数组

points.push_back(point);

最后,

i%*dimensions[0]

不应该有*。也不应该

i/ *dimensions[0]

更改这些内容应该可以解决您的错误

答案 1 :(得分:1)

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

*

在第14行的尺寸前面。即使尺寸被正确声明,它也没有意义。在修复上面指定的声明后,您还需要删除这些额外的星号。

答案 2 :(得分:1)

您没有使用向量作为开始和维度,您正在使用指向整数的指针。请注意,当您尝试使用push_back()时,int数组不能分配给Vector。 Vector的赋值运算符仅适用于Vector和initializer_list。

为什么不对你的x,y,width和height成员使用int?您的代码变得更加简单,如果您需要将它们作为Vector返回给某个调用者,则可以在此时构造Vector。或者,如果需要返回这些向量数千次,可以在Rect构造函数中构造它们。