【发布时间】:2014-06-10 17:27:54
【问题描述】:
好的,所以我正在尝试从文件中解析信息,并且我有这个循环读取未知数量的 5 个数字字符串,这些字符串由新行分隔。 ProfDB 只是一个包含教授类对象的数组。该类有一个方法 (addPrevCourse()),可将 Course 对象添加到该类中的课程数组中。 CRNDictionary 是一个函数,它接受一个字符串并基于该字符串返回一个课程对象。这是sn-ps的代码:
主要:
ifstream in;
in.open("File.txt");
string CRNHash = "";
while (CRNHash != "!ENDLIST"){
in >> CRNHash;
(*ProfDB[used]).addPrevCourse(CRNDictionary(CRNHash));
添加上一课:
void Professor::addPrevCourse(const Course& newCourse)
{
int i = 0;
while (i < 8){
if (Courses_Taught[i].getCRN() == "0"){
Courses_Taught[i] = newCourse;
}
i++;
}
}
CRN字典:
Course CRNDictionary(string CRN){
//search course list for the crn passed, temp implementation
if (CRN == "12345")
return Course("Test", "12344");
else if (CRN == "13254")
return Course("Test2", "13254");
else
return Course("Test2", "BLAH");
}
问题是当我运行程序并打印教授的数组(其中包含 5 个字符字符串)时,所有值都显示为 12344(来自 CRNDictionary 的第一个对象),即使文件有 5 个不同的值.我已经验证 CRNHash 被正确扫描,但无法弄清楚为什么添加到数组中的值不会改变。
【问题讨论】:
-
什么是
ProfDB,它是如何声明的,如何初始化的? -
另请注意,您的阅读循环会将
"!ENDLIST"添加为课程。您可能需要重新考虑一下逻辑。 -
另外(我认为它更相关),
Course类是如何定义的。 -
相关:将该条件更改为:
(in >> CRNHash && CRNHash != "!ENDLIST"),将提取移至条件检查。现在它没有被检查(这不会很顺利)。您也可以将素数丢失为空字符串。新的条件没有意义。 -
您没有展示足够多的代码。最有可能的是,
getCRN()总是返回0和/或您将相同的值存储到所有 8 个 arra 位置。
标签: c++ arrays class variable-assignment