无效使用非静态数据成员进行矩阵构建

时间:2016-12-09 19:59:39

标签: c++

class Itembuilder
{
private:
    int numOfX;
    int numOfY;
    int numOfZ;
    int numOfSpc;
    int itemMatrix [numOfZ][numOfY][numOfX];
public:
    void build (Space spc, Item item)
    {
        numOfX = item.getX()/spc.getX(); //number of space requirement for X origin
        numOfY = item.getY()/spc.getY(); //number of space requirement for Y origin
        numOfZ = item.getZ()/spc.getZ(); //number of space requirement for Z origin

        for (int layer=1; layer<=numOfZ; layer++) // stating layers of item through Z origin
        {
            for (int orgY=1; orgY<=numOfY; orgY++) // stating origin Y of a layer
            {
                for (int orgX=1; orgX<=numOfX; orgX++) // stating origin X
                {
                    itemMatrix[layer][orgY][orgX]=0;
                }
            }
        }
    }
};

嗨,我对C ++编码很新。我正在尝试构建用于在域中分配的3D项目。首先,我从其他类中获得了“item.get”和“spc.get”变量。当尝试使用itemMatrix将单位表示为0时,我收到有关私有变量的非静态条件的错误。我如何用矩阵说明空间单位?

请使用正确的代码更正我的代码

由于

1 个答案:

答案 0 :(得分:1)

问题在于:

int itemMatrix[numOfZ][numOfY][numOfX];

C ++不允许您在声明其他成员时使用成员变量的值。

如果使用嵌套向量,则从数组创建3D矩阵的过程要简单得多:

std::vector<std::vector<std::vector<int>>> itemMatrix;

然后你可以在构造函数中初始化它,如下所示:

Itembuilder(int numOfX, int numOfY, int numOfZ)
:   itemMatrix(numOfX, std::vector<std::vector<int>>(numOfY, std::vector<int>(numOfZ))) {
}
  

有没有其他方法来初始化vector而不是构造函数?

需要在构造函数中初始化向量,以便在构造时使对象保持一致。但是,这并不意味着一旦构造函数完成,您就无法重新分配向量。如果您以后需要更改矩阵,例如,要更改其大小,您可以重新分配矢量:

void changeSize(int numOfX, int numOfY, int numOfZ) {
    itemMatrix = std::vector<std::vector<std::vector<int>>>(
        numOfX
    ,   std::vector<std::vector<int>>(numOfY, std::vector<int>(numOfZ))
    );
}