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时,我收到有关私有变量的非静态条件的错误。我如何用矩阵说明空间单位?
请使用正确的代码更正我的代码
由于
答案 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))
);
}