C++ C++;Ifstream转换为类对象数组
我在一个编程项目上遇到了一些麻烦。我想从.txt文档中获取信息,并将信息存储在类对象数组中。对于.txt文档的每一行,我希望创建一个新的类对象 所以如果有 “10 Mark 9/24/1988客户经理 9詹妮1983年8月6日航运助理“ 在.txt中,第一行将存储在uArray[0]的第一个对象的变量中,第二行将存储在uArray[1]的变量中 我创建了一个包含五个变量的类“users”C++ C++;Ifstream转换为类对象数组,c++,arrays,class,ifstream,C++,Arrays,Class,Ifstream,我在一个编程项目上遇到了一些麻烦。我想从.txt文档中获取信息,并将信息存储在类对象数组中。对于.txt文档的每一行,我希望创建一个新的类对象 所以如果有 “10 Mark 9/24/1988客户经理 9詹妮1983年8月6日航运助理“ 在.txt中,第一行将存储在uArray[0]的第一个对象的变量中,第二行将存储在uArray[1]的变量中 我创建了一个包含五个变量的类“users” int iD; string name, birth, sSN, dept, position; 这就是我
int iD;
string name, birth, sSN, dept, position;
这就是我所拥有的,我知道这很遥远,但我不能把它弄对
{
ifstream myFile;
users uArray[100];
myFile.open("users.txt")
while(!myFile.eof())
{
myFile >> uArray.users.iD >> uArray.users.name >> uArray.users.sSN ...(ect);
}
}
我应该创建一个函数来调用以对信息进行排序,还是有更简单的方法?我被卡住了。。。对于初学者提出的问题,很抱歉…您需要与此更相似的内容,即索引到数组中:
ifstream myFile;
users uArray[100];
myFile.open("users.txt")
i=0;
while(!myFile.eof())
{
myFile >> uArray[i].iD >> uArray[i].name >> uArray[i].sSN ...(ect);
i++;
}
您没有正确访问uArray的元素。由于它是一个数组(在您的示例中大小为100),因此需要指定要将数据加载到的数组元素,如中所示
uArray[i].users.iD
问题的一个解决方案是为文件中的每个记录增加一个变量:
int index = 0;
while ( !myFile.eof() && index < 100 ) {
myFile >> uArray[index].users.iD >> ...;
index++;
}
int索引=0;
而(!myFile.eof()&&index<100){
myFile>>uArray[index].users.iD>>。。。;
索引++;
}
顺便说一句,如果您给“100”值一个名称(作为
#define
或常量int
),并使用该值比较索引
。您可以重载操作符>
,使之更容易。这就是运算符重载背后的实际目的。您提供了一个自定义行为,在使用流时它是完全透明的。在类中声明一个友元
-函数
friend std::ifstream& operator>>(std::ifstream&, users& user);
并加以实施
std::ifstream& operator>>(std::ifstream& stream, users& user){
stream >> user.iD >> user.name >> user.sSN ...(ect)
return stream;
}
然后,您可以使用for循环,并按照上面的操作进行操作。但必须使用数组索引来处理数组中的单个元素
int i = 0;
while(!myFile.eof())
{
myFile >> uArray[i].users.iD >> uArray[i].users.name >>
uArray[i].users.sSN ...(ect);
i++;
}
有关教程,请参阅。一个明显的错误是
while
循环。请参阅以了解更多信息。如果对成员的访问是公开的,则无需将其设置为好友功能。但是,如果您将其声明为友元函数,则该声明必须位于类内部,而不是其自身(在命名空间范围内)。感谢您的提示,但如果您仔细阅读了我的文章,我声明它必须在类内部声明。确实,我忽略了这一点,抱歉,请不要使用而(!file.eof())
。使用while(文件>>内容>>>…)
好的,为什么?我只是好奇