我是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
错误的原因。
答案 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构造函数中构造它们。