#c #loops #vector
#c #циклы #вектор
Вопрос:
итак, что я пытаюсь сделать, это создать несколько объектов с помощью vector. Теперь моя программа работает нормально, если я не использую vector и если у меня есть только один объект. итак, как я могу, чтобы мой класс boxofproduceимел более одного объекта, использующего векторы. я попробовал то, что вы видите перед собой, и это работает, но затем программа выходит из строя и сообщает, что не отвечает. я знаю, что должен где-то использовать push back, но понятия не имею, где. я опубликовал только основную функцию, поэтому вам не нужно видеть всю программу целиком, потому что она слишком большая.
int main()
{
int x;
int size;
vector<BoxOfProduce>box;
cout<<"How many boxes you want";
cin>>size;
for ( x = 0; x < size; x )
{
box[x].setItemAry();
box[x].randomPick();
box[x].display();
box[x].change();
box[x].display2();
}
//BoxOfProduce box;
//box.setItemAry();
//box.randomPick();
//box.display();
//box.change();
//box.display2();
getchar();getchar();
return 0;
}
Комментарии:
1. Вы уверены, что вам нужно использовать вектор? Если количество элементов никогда не меняется после ввода пользователем размера, было бы проще сказать boxofproducebox[] = new BoxOfProduce[size];
2. @AustinMullins Это именно та ситуация, когда следует использовать вектор. Было бы вообще бессмысленно использовать динамически выделяемый массив. Преимуществ нет, но есть риск или утечка ресурсов.
Ответ №1:
Вы получаете доступ к объектам в векторе, не создавая их. Ваш код должен быть таким:
for ( x = 0; x < size; x )
{
BoxOfProduce obj; //create an object
obj.setItemAry();
obj.randomPick();
//.. set other properties
box.push_back(obj); //insert it into the vector
}
vector<BoxOfProduce>box;
просто создаст вектор, но он не содержит никакого BoxOfProduce
объекта. Поэтому, когда вы пытаетесь получить доступ к объектам, программа вылетает.
Ответ №2:
Вам нужно создать свой объект и поместить их в вектор:
vector<BoxOfProduce> boxes;
for (int i = 0; i < 10; i )
{
BoxOfProduce box;
box.setItemAry();
box.randomPick();
box.display();
box.change();
box.display2();
boxes.push_back(box); // Put a box into your vector
}
Ответ №3:
Вы также можете сделать так,
vector<BoxOfProduce>box;
cout<<"How many boxes you want";
cin>>size;
for ( x = 0; x < size; x )
{
BoxOfProduce obj; //create an object
box.push_back(obj); //insert it into the vector
}
for ( x = 0; x < size; x )
{
box[x].setItemAry();
box[x].randomPick();
box[x].display();
box[x].change();
box[x].display2();
}
Комментарии:
1. kk итак, ваш работает и все, но теперь, когда я пытаюсь ввести тип vegi в свою программу, он появляется дважды.
2. неважно, я все равно получил thnx, это была просто проблема cin.ignore()