Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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++ 矩阵生成中非静态数据成员的使用无效 类项目生成器 { 私人: 国际货币基金组织; 内努莫菲; 内努莫夫; 国际货币基金组织; 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++ - Fatal编程技术网

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