C++ 将文件读取到数组错误:'operator>>'不匹配

C++ Reading file into Array Error: no match for 'operator>>'

本文关键字:gt operator 不匹配 错误 文件 读取 数组 C++      更新时间:2023-10-16

在我的OpenFile函数中,它应该提示用户输入文件名并将文件读入数组。我不断收到错误:no match for 'operator>>' (operand types are 'std::ifstream {aka std::basic_ifstream<char>}' and 'entryType').我做了一些研究,发现了一些与此错误相关的类似问题。我没有发现这些问题有帮助,因为它们写得很差。我认为问题可能是使用 void 函数或将数组声明为entryType的一部分。我知道我收到此错误是因为编译器寻找了一个可以处理(istream) >> (entryType)但没有找到的函数。我将如何修复我的代码以摆脱此错误?

头文件

include<string>
using namespace std;
enum Title {Mr, Mrs, Ms, Dr, NA};
struct NameType {
  Title title;
  string firstName;
  string lastName;
};
  struct AddressType {
  string street;
  string city;
  string state;
  string zip;
 };
struct PhoneType {
  int areaCode;
  int prefix;
  int number;
};
struct entryType {
  NameType name;
  AddressType address;
  PhoneType phone;
};
const int MAX_RECORDS = 50;

法典

entryType bookArray[MAX_RECORDS]; // entryType declared in header file
int main()
{
   entryType userRecord;
   string filename;
   ifstream inData;
   char searchOption;
   OpenFile(filename, inData);
   MainMenu(inData, filename);
   return 0;
}
void OpenFile(string& filename, ifstream& inData)
{
   do {
       cout << "Enter file name to open: ";
       cin >> filename;
       inData.open(filename.c_str());
       if (!inData)
           cout << "File not found!" << endl;
   } while (!inData);

   if(inData.is_open())
   {
       for(int i=0; i<MAX_RECORDS;i++)
       {
           inData >> bookArray[i];
       }
   }
}

你应该重载operator>> .

std::istream& operator>>(std::istream& is, T& object)
{
  // Read object from stream
  return is;
}

其中T将是您创建的类型。

void OpenFile(string& filename, ifstream& inData)
{
   do {
      cout << "Enter file name to open: ";
      cin >> filename;
      inData.open(filename.c_str());
      if (!inData)
          cout << "File not found!" << endl;
    } while (!inData);

if(inData.is_open())
{
    for(int i=0; i<MAX_RECORDS;i++)
    {
        inData >> bookArray[i].name.firstName;
    }
  }
}