c++ - 程序通过编译器运行但不给出答案(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++,我想评论而不是写这个作为答案,但我现在做不到。
people[i] = new Person(read_name, read_age);
使用 push_back() 函数将人员添加到向量
我认为[index]
不会适当地增加向量的大小并为新元素重新分配内存
推荐阅读
- html - 内容(一个词)比移动设备上的页面宽
- c - 如何控制c中的浮点输入?
- c++ - 处理 SIGTERM 后无法使用条件变量正确退出子进程
- java - 如何:允许@Transactional 函数调用另一个失败并回滚的@Transactional 函数而不先回滚@Transactional
- c++ - C ++分配给数组与分配给对象
- c# - 更改文本文件中的行
- c# - QuickGraph 查找有向多图的所有路径
- c++ - 使用 Qt 的元对象系统获取对象实例类名
- pyinstaller - 使用代码更改更新 Pyinstaller 应用程序
- ios - 在 Alamofire 关闭中添加公告