Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从函数(C+;+;)初始化对象数组_C++_Arrays_Function_Object_Initialization - Fatal编程技术网

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

如何从函数初始化对象数组?我知道下面的代码是不切实际的;我只是教自己C++。 这是一个包含数据的结构

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;
}