运算符从文件读取到类>>重载时出错

Error overloading >> Operator reading from file into class

本文关键字:gt 出错 重载 文件 读取 运算符      更新时间:2023-10-16

我目前正在编写一个类的程序,该程序要求我重载流提取操作符>>,以便将数据从文件直接提取到类中。我得到一个:

错误C2678: binary '>>':找不到左操作数为'std::ifstream'的操作符(或者没有可接受的转换)

下面是错误影响的具体代码。

int main ()

#include <iostream>
#include <fstream>
#include <iomanip>
#include "stockType.h"
#include "stockListType.h"
using namespace std;
stockType myStock;
stockListType stockList;
ifstream infile;
infile.open("StockData.txt");
infile >> myStock;

stockType.h头文件

#ifndef STOCKTYPE_H
#define STOCKTYPE_H
#include <string>
#include <fstream>
#include <iostream>

class stockType
{
public:
    stockType();
    void printStock();
    void calcPercent();

    char Symbol[3];
    float openingPrice;
    float closingPrice;
    float todayHigh;
    float todayLow;
    float prevClose;
    int volume;
    float percent;
    friend std::ifstream &operator >> (std::ifstream &in, const stockType &myStock);
};
#endif

stock .cpp资源文件

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include "stockType.h"
std::ifstream& operator>> (std::ifstream &in, const stockType &myStock)
{
in >> myStock.Symbol;
in >> myStock.openingPrice;
in >> myStock.closingPrice;
in >> myStock.todayHigh;
in >> myStock.todayLow;
in >> myStock.prevClose;
in >> myStock.volume;
return in;
}

我所做的大多数搜索都是人们在使用ostream时遇到问题,并且在程序使用期间获取数据。尝试使用ifstream来纠正错误并直接从txt文件中读取是很困难的。我可以提供任何额外的信息。非常感谢任何帮助。谢谢。

您的输入操作符签名

std::ifstream& operator>> (std::ifstream &in, const stockType &myStock);
                                           // ^^^^^

没有意义。要从流输入任何东西到myStock参数,它当然必须是非const。此外,您通常不想重载std::istream的特定实现,因此您的签名应该是这样的:

std::istream& operator>> (std::istream &in, stockType &myStock);