C++ 从函数(C+;+;)初始化对象数组
如何从函数初始化对象数组?我知道下面的代码是不切实际的;我只是教自己C++。 这是一个包含数据的结构C++ 从函数(C+;+;)初始化对象数组,c++,arrays,function,object,initialization,C++,Arrays,Function,Object,Initialization,如何从函数初始化对象数组?我知道下面的代码是不切实际的;我只是教自己C++。 这是一个包含数据的结构 struct pointStruct { int numberPoints; Point2D pointArray; }; Point2D类具有实例变量x和y。在单独的功能中,我有: void setPoints(void) { pointStruct myPointData; myPointData.numberPoints = 4; myPoint
struct pointStruct {
int numberPoints;
Point2D pointArray;
};
Point2D
类具有实例变量x
和y
。在单独的功能中,我有:
void setPoints(void) {
pointStruct myPointData;
myPointData.numberPoints = 4;
myPointData.pointArray[4]; // here is the problem
// loop with i
myPointData.pointArray[i].x = ...;
myPointData.pointArray[i].y = ...;
}
我试图初始化数组,这样我就可以循环遍历它并设置x,y坐标。我尝试过使用new
和其他一些方法,但我无法完成我需要做的事情。我怎样才能解决这个问题
当我试图编译这段代码时,我得到了错误“myPointData.pointStruct::pointArray[4]中的'operator[]'不匹配”
pointArray
是Point2D
的单个实例。它不是一个实例数组,在这种情况下,它的类型是Point2D[N]
myPointData.pointArray[4];
上面的语句调用运算符
[]
,获取类型为int
的参数,这不是您实际需要的参数。由于Point2D
中没有这样的成员函数,编译器会抱怨。如果您希望创建实例数组,请使用std::vector
您可能应该像MadScienceDreams建议的那样使用std::vector
然而,如果你想了解这些事情,你可以用指针代替。例如:
struct pointStruct {
int numberPoints;
Point2D* pointArray;
};
void setPoints(void) {
pointStruct myPointData;
const int num_points = 4;
myPointData.numberPoints = num_points;
myPointData.pointArray = new Point2D[num_points];
for(int i = 0; i < num_points; ++i) {
myPointData.pointArray[i].x = ...;
myPointData.pointArray[i].y = ...;
}
// Do stuff with myPointData...
// Don't forget to have a "delete" for every "new" when you're done.
delete[] myPointData.pointArray;
}
struct pointStruct{
整数点;
点2D*点阵列;
};
无效设定点(无效){
pointStruct myPointData;
const int num_points=4;
myPointData.numberPoints=num_点;
myPointData.pointArray=新点2D[num_points];
对于(int i=0;i
Point2D不是数组。就我个人而言,我会使用一个向量,然后在for循环中使用I,执行myPointData.pointVector.push_back(Point2D(x,y))(假设Poin2D有这样一个构造函数)
struct pointStruct {
int numberPoints;
Point2D* pointArray;
};
void setPoints(void) {
pointStruct myPointData;
const int num_points = 4;
myPointData.numberPoints = num_points;
myPointData.pointArray = new Point2D[num_points];
for(int i = 0; i < num_points; ++i) {
myPointData.pointArray[i].x = ...;
myPointData.pointArray[i].y = ...;
}
// Do stuff with myPointData...
// Don't forget to have a "delete" for every "new" when you're done.
delete[] myPointData.pointArray;
}