如何重新计算启动3D矢量的构造函数



我认为问题是链接到此构造函数的:

vector<vector<vector<int>>> itemMatrix;
ItemConstruct(int numOfZ, int numOfY, int numOfX)
:itemMatrix(numOfZ, vector<vector<int>>(numOfY, vector<int>(numOfX, 1))){}

当我尝试致电时:

int main (int nNumberofArgs, char* pszArgs[])
{
    int a1; int b1; int c1;
    int a2; int b2; int c2;
    Space i1;
    Item i2;
    ItemConstruct i3;
    cin>>a1>>b1>>c1>>a2>>b2>>c2;
    i1.setSize(a1, b1, c1);
    i2.setSize(a2, b2, c2);
    cout<<"answer: "<<i3.getA();
    cin.ignore(10, 'n');
    cin.get();
    return 0;
}

我有一个错误:

无匹配的构造函数来初始化'itemconstruct'

class ItemConstruct
{
private:
    int numOfX;
    int numOfY;
    int numOfZ;
    int A;
public:
    void reqOfItem (Space spc, Item item)
    {
        numOfX = item.getX()/spc.getX();
        numOfY = item.getY()/spc.getY();
        numOfZ = item.getZ()/spc.getZ();
    }
    int getNumOfZ() {return numOfZ;} int getNumOfY() {return numOfY;} int getNumOfX() {return numOfX;}
    vector<vector<vector<int>>> itemMatrix;
    ItemConstruct(int numOfZ, int numOfY, int numOfX)
    :itemMatrix(numOfZ, vector<vector<int>>(numOfY, vector<int>(numOfX, 1))){}
    void Matrix (int Z, int Y, int X)
    {
        for(int z=1; z<=Z; z++)
        {
            for(int y=1; y<=Y; y++)
            {
                for(int x=1; x<=X; x++)
                {
                    itemMatrix[z][y][x]=15;
                }
            }
        }
        A=itemMatrix[2][2][2];
    }
    int getA()
    {
        return A;
    }
};

此外,我不确定如何更改3D向量的元素。如您所见,我尝试更改" For"循环。您可以忽略" a"值。我只想确保该方法如何工作。我是C 语言的新手。请帮助我以适当的方式纠正我的脚本。

谢谢。

在这里:

ItemConstruct i3;

您正在调用默认构造函数(无参数的CTR可呼叫),但是您的类无。您可以通过为参数提供默认值将构造函数变成默认的构造函数:

ItemConstruct(int numOfZ = 0, int numOfY = 0, int numOfX = 0)

但是,更好的方法是确保您在调用构造函数之前拥有构造对象所需的一切(在构造对象后,它应该处于有效状态,并且对于默认的构造函数并非总是可能的。将对象置于有意义的状态)可能至关重要):

int a,b,c;
cin>>a>>b>>c;
ItemConstruct i3(a,b,c);

最新更新