【问题标题】:C++ Ifstream into an array of class objectsC++ Ifstream 转换成类对象数组
【发布时间】:2013-04-13 07:36:43
【问题描述】:

我在一个编程项目上遇到了一些问题。我想从 .txt 文档中获取信息,并将信息存储在类对象数组中。对于 .txt 文档的每一行,我想要创建一个新的类对象。

如果有的话

“10 Mark 9/24/1988 客户经理

9 珍妮 8/6/1983 运输助理”

在 .txt 中,第一行将存储在 uArray[0] 处的第一个对象的变量中,第二行将存储在 uArray[1] 的变量中。

我创建了一个包含五个变量的“用户”类。

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);
   }
}

我应该创建一个函数来调用来对信息进行排序还是有更简单的方法?我卡住了...对不起初学者的问题...

【问题讨论】:

  • 一个明显的错误是while 循环。有关更多信息,请参阅here

标签: c++ arrays class ifstream


【解决方案1】:

您可以重载operator>> 以简化此操作。这是运算符重载的实际目的。您提供自定义行为,并且在使用流时它是完全透明的。在你的类中声明一个friend-function

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++;
}

有关教程,请参阅 here

【讨论】:

  • 如果成员的访问权限是公开的,则无需将其设为好友功能。但是,如果将其声明为友元函数,则该声明必须在类内部,而不是单独声明(在命名空间范围内)。
  • 感谢您的提示,但如果您仔细阅读我的帖子,我声明它必须在类中声明。
  • 是的,我忽略了这一点,抱歉打扰了。
  • 不要使用while (!file.eof())。使用while (file >> content >>> ...)
  • 好吧,为什么呢?我只是好奇
【解决方案2】:

你需要更类似于这个的东西,你在数组中建立索引:

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++;
}

【讨论】:

    【解决方案3】:

    您没有正确访问uArray 的元素。由于它是一个数组(在您的示例中大小为 100),因此您需要指定要将数据加载到哪个数组元素中,如

    uArray[i].users.iD
    

    解决问题的一种方法是为文件中的每条记录增加一个变量:

    int index = 0;
    while ( !myFile.eof() && index < 100 ) {
        myFile >> uArray[index].users.iD >> ...;
        index++;
    }
    

    顺便说一句,如果您为“100”值命名(#defineconst int),并使用该值与 index 进行比较,您将获得加分。

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多