gpt4 book ai didi

c++ - 从文件中读取数据拒绝填充对象

转载 作者:行者123 更新时间:2023-11-30 02:15:04 27 4
gpt4 key购买 nike

我正在从一个文件中读取数据,我的两个对象之一正在正确填充,而另一个没有。尽管对象使用本质上相同的功能并从本质上相同的文件读取,但这种情况仍在发生。

#include "DietPlan.h"
#include "exercisePlan.h"

int main()
{
ifstream dietPlansIn("dietPlans.txt");
ifstream exercisePlansIn("exercisePlans.txt");
DietPlan tacos[7];
ExercisePlan burritos[7];


for (int i = 0; i < 7; i++) {
dietPlansIn >> tacos[i];
exercisePlansIn >> burritos[i];
}
}

#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

class DietPlan
{
public:
void setGoal(int newGoal) { goal = newGoal; }
void setName(string newName) { name = newName; }
void setDate(string newDate) { date = newDate; }

friend istream& operator >> (istream& in, DietPlan& D) {
string line;

getline(in, line);
D.setName(line);

getline(in, line);
D.setGoal(atoi(line.c_str()));

getline(in, line);
D.setDate(line);

getline(in, line);

return in;
}

private:
int goal;
string name;
string date;
};

#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
using namespace std;

class ExercisePlan
{
public:
void setGoal(int newGoal) { goal = newGoal; }
void setName(string newName) { name = newName; }
void setDate(string newDate) { date = newDate; }

friend istream& operator>> (istream& in, ExercisePlan E) {
string line;

getline(in, line);
E.setName(line);

getline(in, line);
E.setGoal(atoi(line.c_str()));

getline(in, line);
E.setDate(line);

getline(in, line);

return in;
}
private:
int goal;
string name;
string date;
};

我希望 main 中的 tacos 和 burritos 都能正确填充,但只有 tacos 可以。卷饼拒绝填充。

最佳答案

你需要通过引用传递

istream& operator>> (istream& in, ExercisePlan& E)

不是

istream& operator>> (istream& in, ExercisePlan E)

按照您编写的方式,局部变量会发生变化 E在你的operator>>而不是您要填充的数组。

有时您只是盯着代码看,却看不到明显的东西。

关于c++ - 从文件中读取数据拒绝填充对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689099/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com