C++ 矩阵生成中非静态数据成员的使用无效 类项目生成器 { 私人: 国际货币基金组织; 内努莫菲; 内努莫夫; 国际货币基金组织; int itemMatrix[numOfZ][numOfY][numOfX]; 公众: 无效构建(空间spc、项目) { numOfX=item.getX()/spc.getX();//X原点的空间要求数 numOfY=item.getY()/spc.getY();//Y原点的空间要求数 numOfZ=item.getZ()/spc.getZ();//Z原点的空间要求数 对于(int layer=1;layer
而言,问题在于:C++ 矩阵生成中非静态数据成员的使用无效 类项目生成器 { 私人: 国际货币基金组织; 内努莫菲; 内努莫夫; 国际货币基金组织; int itemMatrix[numOfZ][numOfY][numOfX]; 公众: 无效构建(空间spc、项目) { numOfX=item.getX()/spc.getX();//X原点的空间要求数 numOfY=item.getY()/spc.getY();//Y原点的空间要求数 numOfZ=item.getZ()/spc.getZ();//Z原点的空间要求数 对于(int layer=1;layer,c++,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
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++不允许在声明其他成员时使用成员变量的值
如果使用嵌套向量,则从阵列创建三维矩阵的过程要简单得多:
int itemMatrix[numOfZ][numOfY][numOfX];
std::向量项矩阵;
然后,您可以在构造函数中初始化它,如下所示:
std::vector<std::vector<std::vector<int>>> itemMatrix;
Itembuilder(int-numOfX、int-numOfY、int-numOfZ)
:itemMatrix(numOfX,std::vector(numOfY,std::vector(numOfZ))){
}
有没有其他方法来初始化向量而不是构造函数
向量需要在构造函数中初始化,以便在构造时使对象一致。但是,这并不意味着一旦构造函数完成,您就没有重新分配向量的选项。如果您以后需要更改矩阵,例如更改其大小,您可以重新分配向量:
Itembuilder(int numOfX, int numOfY, int numOfZ)
: itemMatrix(numOfX, std::vector<std::vector<int>>(numOfY, std::vector<int>(numOfZ))) {
}
void changeSize(int numOfX、int numOfY、int numOfZ){
itemMatrix=std::vector(
努莫夫
,std::vector(numOfY,std::vector(numOfZ))
);
}
请包含一个和实际的错误文本。复述倾向于丢失重要的细节。您的问题是编译器不能确定对象的大小。使用<代码> STD::vector < /代码>警告:C++中的数组从<代码> 0代码>代码>大小> 1 < /COD>数组>代码> int x [大小]
。因此,您的for循环开始得太晚,而且走得太远。哎呀,我没想到through@dasblinkenlight感谢您的评论,但是如果我通过构造函数初始化向量,我将无法在main()中再次调用该类为了确保我的脚本的正确性。是否有其他方法来初始化向量而不是构造函数。我还需要在创建3d矩阵后赋值。我坚持这一点
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))
);
}