C++ C++;Ifstream转换为类对象数组

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; 这就是我

我在一个编程项目上遇到了一些麻烦。我想从.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;
这就是我所拥有的,我知道这很遥远,但我不能把它弄对

{
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(文件>>内容>>>…)
好的,为什么?我只是好奇