无法显示文件(与班级相关)

时间:2018-02-08 02:27:01

标签: c++ class constructor ifstream

所以我试图使用私有类变量读取文件。我不确定如何显示文件。可能有另一种方法可以做到这一点,但这是我能想到的。请注意,它是我的第一个使用类和私有和私有/私有成员的项目。我至少走在正确的道路上吗?我一直收到int main函数的错误。我该如何解决? 这是我的主要内容:

#include "Record.h"
#include <sstream>

int main ()
{   
    Record employee;

    ifstream myFile;
     myFile.open("Project 3.dat");
    string str;
    int i=0;

    if (myFile.is_open())
    {
        while (getline(myFile, str))
        {
            istringstream ss(str);
           ss >> employee.get_name(str) >> employee.get_id(stoi(str)) >> 
   employee.get_rate(stoi(str)) >> employee.get_hoursWorked(stoi(str));
        }
    }

    return 0;
}

这是我的标题:

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

class Record
{
    private:
        string name;
        int id;
        double rate;
        double hours;
    public: 
        Record();
        Record (string n, int empid, double hourlyRate, double hoursWorked); 
 // constructor

        void read_data_from_file();
        double calculate_wage();
        void print_data();

        /* ASETTERS AND GETTERS */          
        void set_name (string n);
        string get_name();

        void set_id (int empid);
        int get_id();

        void set_rate (double hourlyRate);
        double get_rate();

        void set_hoursWorked(double hoursWorked);
        double get_hoursWorked();
        /* END OF SETTERS AND GETTERS */            
};

这是我的cpp

#include "Record.h"
Record::Record():name(), id(0), rate(0), hours(0) {} //default constructor 
must be implemented first
Record::Record(string n, int empid, double hourlyRate, double hoursWorked)
{
    name = n;
    empid = id;
    hourlyRate = rate;
    hoursWorked = hours;
}
//
void Record::set_name(string n)
{
    name = n;
}
string Record::get_name()
{
    return name;
}
//
void Record::set_id(int empid)
{
    id = empid;
}
int Record::get_id()
{
    return id;
}
//
void Record::set_rate(double hourlyRate)
{
    rate = hourlyRate;
}
double Record::get_rate()
{
    return rate;
}
//
void Record::set_hoursWorked(double hoursWorked)
{
    hours = hoursWorked;
}
double Record::get_hoursWorked()
{
    return hours;
}
//


double Record::calculate_wage()
{
    return (rate * hours);
}

1 个答案:

答案 0 :(得分:0)

我可以看到您的代码存在一些问题。你的大多数问题与你的问题无关(我的意思是使用班级或私人/公共成员)。你有更多基本的误解。所以这里有一些可能对你有帮助的解释:

1-使用函数:使用定义的函数时遇到一些麻烦,函数可以有多个输入参数和一个返回值。基本上它就像这个return_type function_name(parameter_type param1, ...)。这意味着如果你调用这个函数你需要传递param1,...并期望你的函数操作,然后返回值为return_type。你定义了一些set和get函数。如果你想设置一些你应该调用set函数并将你想要的值传递给它,它会将你的值复制到你定义的成员数据,之后你可以调用get函数来检索该值。所以当你用参数调用get函数时会引发错误。在这里你想调用set函数。

2-使用stoi:正如您所看到的,您在使用stoi函数时也遇到错误,这是一个将字符串转换为整数的函数,您在这里错过的是该函数在std命名空间中声明。如果你想使用它,你需要像std::stoi(str)一样使用它。另一件事,using namespace std is a bad practice

3-设计事宜:在OOP设计中,课程必须有目的和实际工作要做。它可能是抽象类的接口,但是一堆set和get函数不能满足创建类的需要。如果你的类要进行文件操作,那就没关系,但是只要你共享你的代码,它只是一些set和get函数。