I am getting the following errors can anyone fix. This is the exact order it giv
ID: 3559917 • Letter: I
Question
I am getting the following errors can anyone fix. This is the exact order it gives me when I compile it.
error C2064: term does not evaluate to a function taking 1 arguments
error C2064: term does not evaluate to a function taking 1 arguments
error C2064: term does not evaluate to a function taking 1 arguments
error C2365: 'GetInputFile' : redefinition; previous definition was 'data variable'
error C2065: 'str' : undeclared identifier
error C2228: left of '.open' must have class/struct/union
error C2065: 'str' : undeclared identifier
error C2228: left of '.is_open' must have class/struct/union
error C2365: 'GetOutputFile' : redefinition; previous definition was 'data variable
error C2065: 'str' : undeclared identifier
error C2228: left of '.open' must have class/struct/union
error C2065: 'str' : undeclared identifier
error C2228: left of '.is_open' must have class/struct/union
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
// Function prototypes
void PrintFileContents(std::ifstream& ifile);
void ProcessAccounts(std::ifstream& ifile, std::ofstream& ofile, double);
void SetInputStreamPos(std::ifstream &str, int pos);
void SetOutputStreamPos(std::ofstream &str, int pos);
int GetInputFile;
int GetOutputFile;
//[BEGIN MAIN]
int main()
{
std::string inputFileName;
std::string outputFileName;
double interestRate;
std::cout << "Enter an input filename: ";
std::cin >> inputFileName;
std::cout << "Enter an output filename: ";
std::cin >> outputFileName;
std::cout << "Enter an interest rate (%): ";
std::cin >> interestRate;
std::cout << std::endl;
std::ifstream ifile = GetInputFile(inputFileName);
std::ofstream ofile = GetOutputFile(outputFileName);
std::cout << "Current account status:" << std::endl;
PrintFileContents(ifile);
ProcessAccounts(ifile, ofile, interestRate);
ifile.close();
ofile.close();
std::cout << std::endl;
std::cout << "New account status:" << std::endl;
ifile = GetInputFile(outputFileName);
PrintFileContents(ifile);
ifile.close();
std::cout << "Press ENTER";
std::cin.ignore();
std::cin.get();
return 0;
}
//[END MAIN]
void ProcessAccounts(std::ifstream &ifile, std::ofstream &ofile, double rate)
{
// Everyday the bank checks the status of the accounts and processes them
// If the customer has:
// 1) a positive savings balance, pay them interest
// 2) a negative savings balance, transfer it to credit (credit is positive)
// 3) a credit balance, charge them interest
// Note: Unlike normal banks, the interest rate for savings and credit is the same
// Read the info from the input file
// Put the new info into the output file
// The format for the input file and output file should be
// [NAME] [SAVINGS BALANCE] [CREDIT BALANCE]
// There is a single space between each value and a newline at the end
// Put your code here
std::string name;
double sav_balance;
double credit_balance;
ifile >> name >> sav_balance >> credit_balance;
while(!ifile.eof())
{
//std::cout << name << " " << sav_balance << " " << credit_balance << std::endl;
double sav_final=0;
double credit_final=0;
if(sav_balance > 0) // 1) a positive savings balance, pay them interest
sav_final = sav_balance + sav_balance*rate;
else if(sav_balance < 0) // 2) a negative savings balance, transfer it to credit (credit is positive)
credit_final = credit_balance - sav_balance;
if(credit_balance > 0) // 3) a credit balance, charge them interest
credit_final = credit_final + credit_balance*rate;
ofile << name << " " << sav_final << " " << credit_final << std::endl;
//std::cout << name << " " << sav_final << " " << credit_final << std::endl;
ifile >> name >> sav_balance >> credit_balance;
}
}
void PrintFileContents(std::ifstream &str)
{
// Print the contents of the file
// First, print the file headers
// Then, print each line.
// Make sure the text is properly formatted
// Remember the functions available in iomanip?
// EXAMPLE:
// Name Savings Credit
// Bob $23.56 $0.00
// Joe $43.52 $0.00
// Sally -$1.58 $0.00
// Put your code here
std::string name;
double sav_balance;
double credit_balance;
std::cout <<"Name Savings Credit" << std::endl;
str >> name >> sav_balance >> credit_balance;
while(!str.eof())
{
std::cout << std::setprecision(2) << std::fixed << name << " $" << sav_balance <<" $"<< credit_balance << std::endl;
str >> name >> sav_balance >> credit_balance;
}
}
std::ifstream GetInputFile(std::string filename)
{
// Open the file named filename
// Make sure it exists
// Return it as an input file stream
// Put your code here
str.open(filename);
if(!str.is_open())
{
std::cout <<"unable to open file so Exiting .." << std::endl;
system("pause");
}
}
std::ofstream GetOutputFile(std::string filename)
{
// Open the file named filename
// Make sure it exists
// Return it as an output file stream
// Put your code here
str.open(filename);
if(!str.is_open())
{
std::cout <<"unable to open file so Exiting .." << std::endl;
system("pause");
}
}
void SetInputStreamPos(std::ifstream &str, int pos)
{
// Set the 'g'et cursor to the desired byte in the stream
// Use the beginning of the file as the reference point
// Put your code here
str.clear();
str.seekg(pos, std::ios::beg);
}
void SetOutputStreamPos(std::ofstream &str, int pos)
{
// Set the 'p'ut cursor to the desired byte in the stream
// Use the beginning of the file as the reference point
// Put your code here
str.clear();
str.seekp(pos, std::ios::beg);
}
Explanation / Answer
The problem is in the overloading functons of GetInputFile.The same applies for the GetOutputFile.
There are two variants and they only differ by return types, one has a return type of int and the reutrn type of the other is ifstream.So, the overloading isnt possible until the parameters vary too.On fixing that, the overloading will take place.
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.