Проблема использования push_back с вложенными классами C ++ - PullRequest
0 голосов
/ 04 июля 2019

У меня проблемы с пониманием правильного синтаксиса для использования 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.

...