我认为问题是链接到此构造函数的:
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);