【发布时间】:2014-04-20 15:25:52
【问题描述】:
好的,所以我有一个 3 级的车辆继承树。叶类(树下的最后一个)是六个。我想创建一个从 .txt 文件中读取的函数,然后将信息分配给不同的变量(例如,该文件将包含 2006 Toyota Supra Diesel,这些将分配给 year、brand、model ,fuel_type)。实际上我设法做到了,但后来当我将代码拆分为 .h 和 .cpp 文件时,该函数停止工作。
void Cars::txt_input()
{
getline(file,input); //This is in the .cpp file for one of the
year = atoi(input.c_str()); //child classes.
getline(file,input);
brand = input;
getline(file,input);
model = input;
getline(file,input);
passenger_capacity = atoi(input.c_str());
getline(file,input);
engine_power = atoi(input.c_str());
getline(file,input);
max_speed = atoi(input.c_str());
getline(file,input);
fuel_type = input;
getline(file,input);
wheel_drive = input;
getline(file,input);
average_cons = atoi(input.c_str());
getline(file,input);
number_doors = atoi(input.c_str());
getline(file,input);
cType = input;
getline(file,input);
price = atoi(input.c_str());
}
在我的 main() 中,我声明了 ifstream file("vehicles.txt") 和 string input,它们在拆分代码之前运行良好。另外,我已经创建了ifstream file 和string input 变量作为基类的受保护成员,否则它将无法编译,因为它找不到任何文件和输入变量可以使用。但是,现在看来该函数根本没有从main() 中获取变量,而只是用 0 或 N/A 填充所有对象的字段(根据构造函数。)
for (int i = 0; i < 11; i++)
{
if(i<4)
vehicles.push_back(new Cars());
vehicles[vehicles.size()-1]->txt_input();
}
if(i==4 || i==5)
{
vehicles.push_back(new Bus());
vehicles[vehicles.size()-1]->txt_input();
}
//...
}
这就是我在main() 中创建对象的方式。正如我所说,当我在 Main.cpp 中拥有所有代码时,它运行良好。另外,我尝试将(ifstream file,string input) 作为参数传递给txt_input() 函数,但它会产生错误C2248。这是我第一次发帖,如有歧义,请见谅。如果需要,我会提供更多代码/信息。
class Vehicles
{
public:
Vehicles();
virtual void txt_input();
virtual void user_input();
virtual void output();
void red_output();
int getPC();
int getPrice();
string getBrand();
void open_file();
protected:
string brand, model, type;
int year, passenger_capacity, price;
double engine_power, max_speed;
ifstream file;
string input;
};
这是父类。
【问题讨论】:
-
file和input定义在哪里?他们是Cars或 globals 的成员吗? -
您的 ifstream 文件在哪里以及如何声明和定义?更简洁的设置是将输入流传递给您的 txt_input 函数。
-
@Jarod42 文件和输入是在基类中定义的。我刚刚编辑了帖子,对不起。
-
@heinrichj ifstream 文件仅在基类中声明。如何将流传递给 txt_input 函数?正如我所说,当我尝试时它给了我一个 C2248。另外,ifstream 文件只是被声明了,并没有真正打开文件。
-
txt_input 是否在您的基类中声明为虚拟? “文件”成员是如何初始化的?如果您显示基类的完整代码和具体类之一,也许会更容易......