首页 > 解决方案 > 程序通过编译器运行但不给出答案(C++ 类)

问题描述

我是 C++ OOP 的新手,在实现以下任务时遇到了困难:该程序是关于从文件中获取信息,将其存储在向量指针中然后打印它,但它会导致进程失败。基本上不会调用 Car 类中的第二个构造函数,我似乎也没有找到解决此问题的方法。想得到一些提示。

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

class Person{
protected:
    string name;
    int age;
public:
    Person(string n, int a) {
        name = n;
        age = a;
        cout << "Constructor called" << endl;
    }
    void IncAge(){
        age++;
    }
    string get_name() {
        return name;
    }
    int get_age() {
        return age;
    }

};

class Car{
public:
    string brand;
    Person* owner;
    Person* driver;
    Car(string b, Person* o, Person* d){
        brand = b;
        owner = o;
        driver = d;
        cout << "Constructor 2 called" << endl;
    }
    string get_brand(){ return brand; }
    void get_owner(){ cout << owner;  }
    void get_driver(){ cout << driver; }


};

void printall(vector<Car*> car){
    for(int i =0; i < car.size(); i++){
        cout << car[i]->get_brand();
    }
}

int main() {

    vector<Person*> people;
    vector<Car*> cars;

    ifstream openFile;
    string filename = "input.txt";
    openFile.open(filename.c_str());

    if(openFile.fail()){
        cout << "Failed opening targeted file!" << endl;
        return 1;
    }
    else{
        int n;
        int read_age;
        string read_name, read_car, read_owner,read_driver;
        openFile >> n;
        for(unsigned int i = 0; i < n; i++){
            openFile >> read_name;
            openFile >> read_age;
            people[i] = new Person(read_name, read_age);

        }

        openFile >> n;

        for(unsigned int i = 0; i < n; i++){
            openFile >> read_car;
            openFile >> read_owner;
            openFile >> read_driver;

            unsigned int j = 0;
            unsigned int k = 0;
            for(; j < people.size(); j++){
                if(read_owner == people[j]->get_name()) break;
            }
            for(; k < people.size(); k++){
                if(read_driver == people[k]->get_name()) break;
            }

            cars[i] = new Car(read_car, people[j], people[k]);

        }

        openFile.close();

        for(unsigned int i = 0; i < people.size(); i++) {
            people[i]->IncAge();
        }
        printall(cars);
    }
    return 0;
}

标签: c++

解决方案


我也在学习c++,我想评论而不是写这个作为答案,但我现在做不到。

people[i] = new Person(read_name, read_age);

使用 push_back() 函数将人员添加到向量

我认为[index]不会适当地增加向量的大小并为新元素重新分配内存


推荐阅读