У меня проблемы с пониманием правильного синтаксиса для использования push_back с вложенными классами.
Я создаю вектор класса "Cars".Внутри "Автомобили" в векторе структуры "Подэлементы".Если я объявляю экземпляр «Cars» и «SubItems» в моей функции buildList, мой код работает, но данные из предыдущей итерации задерживаются.Затем я решил динамически распределить класс и структуру внутри соответствующих циклов, перенести их обратно в вектор и удалить в конце каждой итерации.Я пытался исправить это разными способами, но кое-что мне не хватает.Для кода должно быть очевидно, что это не настоящий код из проекта, над которым я работаю.Я просто написал это просто, чтобы показать проблему, с которой я столкнулся.
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
struct SubItems {
std::string model;
float price;
};
class Cars {
private:
std::string make;
int year;
int numOfCars;
public:
std::vector<SubItems> inventory;
std::string getMake() {
return make;
}
int getYear() {
return year;
}
int getNumOfCars() {
return numOfCars;
}
void printCar() {
std::cout << "Make: " << getMake() << std::endl;
std::cout << "Year: " << getYear() << std::endl;
if (getNumOfCars() == 0) {
std::cout << "None available" << std::endl;
}
else {
for (unsigned int i = 0; i < inventory.size(); i++) {
std::cout << "\tModel: " << inventory[i].model << std::endl;
std::cout << "\tPrice: " << inventory[i].price << std::endl;
}
}
}
};
void buildList(std::ifstream& file, std::vector<Cars>& cars) {
int numOfCars;
int numOfMakes;
file.read((char*)& numOfCars, 4);
for (int i = 0; i < numOfCars; i++) {
//Cars car; // This works but I need the data cleared after each iteration
Cars* car = new Cars();
// Assume all relevant data is read in, converted, and
// assigned appropriately. This isn't my issue.
file.read((char*)& numOfMakes, 4); // I already verified gives expected result.
for (int j = 0; j < numOfMakes; j++) {
//SubItems sub; // This works but I need the data cleared after each iteration
SubItems* sub = new SubItems();
// Again, assume all relevant data is read in, converted, and
// assigned appropriately. This isn't my issue.
/*---------- This is my problem ----------*/
car->inventory.push_back(sub);
delete sub;
}
/*---------- And this is my problem ----------*/
cars.push_back(car);
delete car;
}
}
int main() {
// Not relevant to issue;
}
Вы увидите проблему в обеих строках push_back, если скопируете / вставите ее в IDE.