C ++类读取文本文件 - 获取错误

时间:2016-02-09 22:22:49

标签: c++ class

我有以下代码使用类定义读取文本文件。我创建了TermGrade.h文件和TermGrade.cpp文件。但我得到的错误很少:

在TermGrade.h文件中,我收到警告,它无法找到任何已定义函数(Readdata,MidsemesterScore,FinalScore和LetterGrade)的定义,即使我在.cpp文件中定义了它们。

然而,主要问题是在TermGrade.cpp文件中我收到错误"错误:没有重载函数的实例" getline"匹配参数列表"它还抱怨标识符" inLine"是未定义的,但它不会在下一个声明中抱怨inLine,但该声明说明了两者 dataLines [lineNumber]未定义!我是否需要在.cpp文件中定义这些变量?任何帮助将不胜感激。

谢谢你, 比尔。

// TermGrade.h file

#ifndef TERMGRADE_H
#define TERMGRADE_H

#include <string>
#include<iostream>
#include<fstream>
using namespace std;

class TermGrade {
public:
    TermGrade(string fileName) {};
    string StudentID;
    int assignments;
    int exam1;
    int exam2;
    int final;
    bool records = true;

private:
    string inLine;
    string dataLines[100];
    int lineNumber = 0;


    bool Readdata(istream& in);         // Read line of data from input file
    double MidsemesterScore() const;    // Calculates average 
    double FinalScore() const;          // Calculates average 
    char LetterGrade() const;           // Determines grade


}; // end class Termgrade

#endif

// TermGrade.cpp file

#include "TermGrade.h" // TermGrade class definition
#include<iostream>
#include<fstream>

TermGrade::TermGrade(string fileName) {
    ifstream infile;
    infile.open(fileName);

}


bool Readdata(istream& infile)
{
    if (!infile.eof)
    {
        getline(infile, inLine);
        dataLines[lineNumber] = inLine;
        return true;
    }
    return false;
}

double MidsemesterScore()
{
    return 0.0;
}

double FinalScore()
{
    return 0.0;
}

char LetterGrade()
{
    return 'a';
}

1 个答案:

答案 0 :(得分:1)

  

在TermGrade.h文件中,我收到无法找到的警告   任何已定义函数的定义(Readdata,   MidsemesterScore,FinalScore和LetterGrade)即使我拥有它们   在.cpp文件中定义。

不,您没有在TermGrade::Readdata文件中定义它们。例如,您没有Readdata方法的定义。该方法未在任何地方定义。你在那里有一个名为TermGrade::Readdata的函数,但是使用getline()方法无关紧要。

关于您遇到的其他一些错误:

您正在调用一个名为istream的函数,但是您没有在任何地方定义该函数,这就是您收到编译器错误的原因。也许您打算从C ++库中引用std :: getline()函数,如果是这样的话,那就是你应该引用的内容。

此外,您正在传递对名为std::istream的类的引用,遗憾的是您没有在任何地方定义此类。如果您打算引用std::istream类,那么您应该引用它。

但是,eof类没有名为eof的成员。但它确实有一个def singleton(cls): instance = None @functools.wraps(cls) def inner(*args, **kwargs): nonlocal instance if instance is None: instance = cls(*args, **kwargs) print cls return instance return inner @singleton class TryMe(object): pass m = TryMe() print m ()方法。