Я думаю, что проблема связана с этим конструктором:Как повторно вызов конструктора из inititialized 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-вектора. Я попытался изменить цикл «за», как вы видите выше. Вы можете игнорировать значение «A». Я просто хочу убедиться, как работает этот метод. Я очень новичок в языке C++. Пожалуйста, помогите мне правильно исправить свой сценарий.
Спасибо.
вы пытаетесь вызвать конструктор по умолчанию (вызываемый без аргументов), но ваш 'ItemConstruct' не имеет. Либо укажите конструктор по умолчанию, либо укажите параметры, необходимые для построения. – user463035818
Не строите объект до тех пор, пока не получите значения для его построения. В отличие от C, вам не нужно объявлять все заранее. Стандартная практика заключается в том, чтобы объявлять вещи как можно ближе к точке использования, поэтому легче понять код. – NathanOliver