所以我试图使用私有类变量读取文件。我不确定如何显示文件。可能有另一种方法可以做到这一点,但这是我能想到的。请注意,它是我的第一个使用类和私有和私有/私有成员的项目。我至少走在正确的道路上吗?我一直收到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);
}
答案 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函数。