ofstream & ifstream

I am having a hard time with this code and this is my 1st time to this website and to writing code.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#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);
	std::ifstream GetInputFile(std::string filename);
    //std::ofstream GetOutputFile(std::string filename);

//[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\tSavings\tCredit" << std::endl;
	str >> name >> sav_balance >> credit_balance;

	while(!str.eof())
	{
		std::cout << std::setprecision(2) << std::fixed << name << "\t$" << sav_balance <<"\t$"<< 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
	std::ifstream ifile;

	ifile.open(filename);

	if(!ifile.is_open())
	{
		ifile.close();
	}
	else;
	{
		std::cout <<"unable to open file so Exiting .." << std::endl;
	}
	return ifile;
}

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

	std::ofstream ofile;

	ofile.open(filename);

	if(!ofile.is_open())
	{
		ofile.close();
	}
	else
	{
		std::cout <<"unable to open file so Exiting .." << std::endl;
	}
	return ofile;
}

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);
}
Last edited on
Write your question or you don't have any?
Here are the errors that are given and I have no idea what to do.

error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : no accessible path to private member declared in virtual base 'std::basic_ios<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\ios(152) : see declaration of 'std::basic_ios<_Elem,_Traits>::operator ='
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::operator =(const std::basic_istream<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]

1> error C2248: 'std::basic_streambuf<_Elem,_Traits>::operator =' : cannot access private member declared in class 'std::basic_streambuf<_Elem,_Traits>'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> c:\program files (x86)\microsoft visual studio 9.0\vc\include\streambuf(22) : see declaration of 'std::basic_streambuf<_Elem,_Traits>::operator ='
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> This diagnostic occurred in the compiler generated function 'std::basic_filebuf<_Elem,_Traits> &std::basic_filebuf<_Elem,_Traits>::operator =(const std::basic_filebuf<_Elem,_Traits> &)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1>error C2664: 'void std::basic_ifstream<_Elem,_Traits>::open(const wchar_t *,std::ios_base::openmode,int)' : cannot convert parameter 1 from 'std::string' to 'const wchar_t *'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

1> error C2664: 'void std::basic_ofstream<_Elem,_Traits>::open(const wchar_t *,std::ios_base::openmode,int)' : cannot convert parameter 1 from 'std::string' to 'const wchar_t *'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

The thing is I cant change the functions or anything in the Int main() but I can change anything with in the function prototypes. An example would be:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
	// Open the file named filename
	// Make sure it exists
	// Return it as an input file stream

	// Put your code here
	std::ifstream ifile;

	ifile.open(filename);

	if(!ifile.is_open())
	{
		ifile.close();
	}
	else;
	{
		std::cout <<"unable to open file so Exiting .." << std::endl;
	}
	return ifile;
}

Unless you're using a compiler that supports move semantics, the prototype and definitions of your GetInputFile and GetOutputFile are going to be a problem. From the error messages you posted, one can see you're using a compiler that was last updated in 2008, but move semantics were not added until C++11 (which, coincidentally, is when constructors for the fstream family of streams had an overload for std::string added.)

Update your compiler?
I hear what you are saying but this is for a school project and this is there software that they want to use. I'm not sure what to do I have changed the function prototype to all being void and the program works perfectly but my teacher uses a program that grades our program and it can tell if I don't use his template which is this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>

// Function prototypes


//[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
}

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::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
}

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
}

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
}

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
}


The only thing I can do is put in where it say code here. If you have an idea on how to do I would greatly appreciate it.

Thanks
Topic archived. No new replies allowed.