错误重载>>操作员从文件读入类

时间:2014-08-04 22:16:25

标签: c++ visual-c++ operator-overloading ifstream

我目前正在开发一个类的程序,它要求我重载流提取操作符>>,以便将文件中的数据直接输入到类中。我得到了:

错误C2678:二进制'>>' :找不到哪个运算符采用类型' 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

stockType.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进行erorr-correct并直接从txt文件中读取一直很困难。我可以提供所需的任何其他信息。任何帮助深表感谢。感谢。

1 个答案:

答案 0 :(得分:3)

您的输入操作员签名

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

毫无意义。要从流中输入任何内容到myStock参数,当然它必须是非const。此外,您通常不想重载std::istream的特定实现,因此您的签名应如下所示:

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