Reputation: 29
//**************************************************************************************************************
// FILE: a04.cpp
//**************************************************************************************************************
#include <fstream>
#include <iostream>
#include "Sorter.hpp"
using namespace std;
// Write the function header for Merge ()
void Merge(int a[] , int b[],int c[], int n)
{
int i = 0, j = 0, k = 0;
while (i < n || j < n) {
// Write the if-elseif-elseif-... statement in the body of the while loop
if (i < n && j < n && a<=b) {
c = a;
i++;
}
else if (i < n && j < n && a > b) {
c =b;
j++;
}
else if (i < n) {
c = a;
i++;
}
else {
c =b;
j++;
}
k++;
} // end while
} // end function merge
void ReadList(ifstream fin, int a[], int n);
void ReadFile(int a[], int b[], int& n)
{
ifstream fin ("ints-in.txt");
ReadList(fin,a,n); // come back again different than the psuedo code
ReadList(fin,b,n);
fin.close();
}
// Write the function header for ReadList()
void ReadList(ifstream fin, int a[], int n)
{
n = 0;
int number;
// Implement the sentinel loop
while (fin >> number && number != -1) {
a[n] = number;
n++; // come back again
}
}
void WriteFile(int a[], int n)
{
ofstream fout("ints-out.txt");
// Write a vary loop where variable ivaries from 0 to n - 1. In the loop send a[i] and ' ' to fout.
for (int i =0; i <= n-1; i++) {
fout << a << ' '; // come back again.
}
fout << -1;
fout.close();
}
int main()
{
// Define int arrays a,b, and c and int variable n.
int a[100], b[100], c[200];
int n;
// Call ReadFile () passing a,b, and n
ReadFile(a,b,n);
// Define and create a Sorter object named sorter
Sorter sorter;
// Call SelectionSort() on sorter to sort a into ascending order.
// Hint: to access the ASCENDING constant data member of the Sorter class you write Sorter::ASCENDING.
sorter.SelectionSort(a,100,Sorter::ASCENDING); //come back again here.
// Call BubbleSort () on sorter to sort b into ascending order
sorter.BubbleSort(b,100,Sorter::ASCENDING);
// Call Merge() passing a,b,c, and n
Merge(a,b,c,n);
// Call WriteFile () passing c and 2n
WriteFile(c,2*n);
return 0;
}
I don't know why it can't be compiled.
Error 1 error C2248: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>' c:\users\hisham\documents\visual studio 2012\projects\homework4\a04.cpp 39 1 Homework4 Error 2 error C2248: 'std::basic_ifstream<_Elem,_Traits>::basic_ifstream' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>' c:\users\hisham\documents\visual studio 2012\projects\homework4\a04.cpp 40 1 Homework4 3 IntelliSense: "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits>::_Myt &_Right) [with _Elem=char, _Traits=std::char_traits]" (declared at line 827 of "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\fstream") is inaccessible c:\Users\Hisham\Documents\Visual Studio 2012\Projects\Homework4\a04.cpp 39 11 Homework4 4 IntelliSense: "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits>::_Myt &_Right) [with _Elem=char, _Traits=std::char_traits]" (declared at line 827 of "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\fstream") is inaccessible c:\Users\Hisham\Documents\Visual Studio 2012\Projects\Homework4\a04.cpp 40 11 Homework4
Thanks.
Upvotes: 0
Views: 749
Reputation: 1
I've been working on this same code and I have something different in the Merge() function.
void Merge(int a[], int b[], int c[], int& n)
{
int i = 0, j = 0, k = 0;
while (i < n || j < n)
{
if (i < n && j < n && a[i] <= b[j])
{c[k] = a[i];
i++;}
else if (i < n && j < n && a[i] > b[j])
{c[k] = b[j];
j++;}
else if (i < n)
{c[k] = a[i];
i++;}
else
{c[k] = b[j];
j++;}
k++;
}
}
I put the i, j, and k in the brackets. I'm not sure if this is correct or not, but I haven't had any error messages on that part.
Upvotes: 0
Reputation: 15872
void ReadFile(int a[], int b[], int& n)
{
ifstream fin ("ints-in.txt");
ReadList(fin,a,n); // come back again different than the psuedo code
ReadList(fin,b,n);
fin.close();
}
void ReadList(ifstream fin, int a[], int n)
You are attempting to pass a istream instance by copy. You cannot do that - the copy constructors are marked private.
You need to declare your ReadList function as:
void ReadList(ifstream& fin, int a[], int n)
Upvotes: 1
Reputation: 145269
iostreams are not copyable, so can't pass them by value.
Upvotes: 1
Reputation: 103693
The error doesn't say ifstream
is inaccessible. It says (in its own convoluted way) that the copy constructor is inaccessible, because it is declared private. The problem is that you're passing ifstream
by value, which tries to invoke the inaccessible copy constructor.
void ReadList(ifstream fin, int a[], int n)
Pass it by reference instead.
void ReadList(ifstream & fin, int a[], int n)
Upvotes: 5