c++ - 如何重新调用初始化 3D vector 的构造函数

标签 c++ vector constructor element

我认为问题与此构造函数有关:

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;

}

我收到如下错误:

No matching constructor for initialization of '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 vector 元素。如上所示,我尝试通过“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);

关于c++ - 如何重新调用初始化 3D vector 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41226762/

相关文章:

c++ - Array 和 Vector 在编程中的区别

c++ - vector 删除多个区域,2次删除与单次分配?

c++ - 如何使用2d数组作为参数创建C++构造函数

c++ - 使用 C++ 在 Windows 中检索 CPU 负载百分比总数

c++ - PTRACE_SYSCALL 和 orig_eax

c++ - 是否有 C++ 等同于 PHP 的 var_dump 和死?

c++ - 如何保留指向插入集合然后插入 vector 的对象的指针?

java - Java中的构造函数返回什么?

java - 在hibernate中,是否可以在构造函数中保留一个对象?

c++ - 使用二维字符数组的内容填充字符串的C++ vector :大小太大时失败