我认为问题与此构造函数有关:
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/