代码之家  ›  专栏  ›  技术社区  ›  TimeStamp12

重载>>运算符将文件读入类时出错

  •  0
  • TimeStamp12  · 技术社区  · 12 年前

    我目前正在为类编写一个程序,该程序要求我重载流提取运算符,>>,将文件中的数据直接放入类。我得到一个:

    错误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纠正错误并直接从txt文件读取是很困难的。我可以提供任何需要的额外信息。非常感谢任何帮助。谢谢

    1 回复  |  直到 12 年前
        1
  •  3
  •   πάντα ῥεῖ    12 年前

    您的输入操作员签名

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

    没有任何意义。要将流中的任何内容输入到 myStock 参数,必须为非 const 当然此外,您通常不希望重载 std::istream ,因此您的签名应如下所示:

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