Я начинающий студент C ++, использую jGRASP и установил MinGW32, потому что мы дистанционно превращаем наши назначения в машину Linux, что помогает гарантировать его правильную работу, моделируя среду Linux в Windows или что-то в этом роде. Для MinGW32 я установил «базовый пакет», а затем вручную выбрал опцию компилятора C ++. В jGRASP я пошел в settings>>PATH/CLASSPATH>>workspace
и добавил новый каталог PATH в C:\MinGW\mingw32\bin
так что он будет знать, где находится компилятор g ++.
Я получаю эти сумасшедшие сообщения об ошибках при компиляции в jGRASP, которые я не могу понять. Я думаю, что это как-то связано с моим заголовком из-за iostream.
#include <string.h>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
Вот сообщения об ошибках компилятора:
ios:42:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
from lab1.cpp:6:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\ios_base.h: In copy constructor 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)':
ios_base.h:786:5: error: 'std::ios_base::ios_base(const std::ios_base&)' is private
ios_base(const ios_base&);
^
ios:44:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
from lab1.cpp:6:
basic_ios.h:66:11: error: within this context
class basic_ios : public ios_base
^
In file included from lab1.cpp:8:0:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)':
fstream:427:11: note: synthesized method 'std::basic_ios<char>::basic_ios(const std::basic_ios<char>&)' first required here
class basic_ifstream : public basic_istream<_CharT, _Traits>
^
ios:43:0,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\ostream:38,
from c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39,
from lab1.cpp:6:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\streambuf: In copy constructor 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)':
streambuf:802:7: error: 'std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char; _Traits = std::char_traits<char>]' is private
basic_streambuf(const basic_streambuf& __sb)
^
In file included from lab1.cpp:8:0:
fstream:72:11: error: within this context
class basic_filebuf : public basic_streambuf<_CharT, _Traits>
^
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\fstream: In copy constructor 'std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)':
fstream:427:11: note: synthesized method 'std::basic_filebuf<char>::basic_filebuf(const std::basic_filebuf<char>&)' first required here
class basic_ifstream : public basic_istream<_CharT, _Traits>
И вот мой код:
// ----------------------------------------------------------------------------
// You write meaningful doxygen comments and assumptions
#include <string.h>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
int const MAXSIZE = 100; // maximum number of records in total
int const MAXLENGTH = 31; // maximum string length
int const MAXGRADE = 100; // highest possible grade
int const LOWGRADE = 0; // lowest possible grade
int const GROUP = 10; // group amount
int const HISTOGRAMSIZE = (MAXGRADE-LOWGRADE)/GROUP + 1; // grouped by GROUP
struct StudentType { // information of one student
int grade; // the grade of the student
char last[MAXLENGTH]; // last name (MAXLENGTH-1 at most)
char first[MAXLENGTH]; // first name (MAXLENGTH-1 at most)
};
// prototypes go here
bool sortInput(ifstream, StudentType, int);
void displayList(StudentType, int);
/*setHistrogram();
displayHistogram();
findAverage();*/
//------------------------------- main ----------------------------------------
int main() {
StudentType students[MAXSIZE]; // list of MAXSIZE number of students
int size = 0; // total number of students
int histogram[HISTOGRAMSIZE]; // grades grouped by GROUP
int average = 0; // average exam score, truncated
// creates file object and opens the data file
ifstream infile("data1.txt");
if (!infile) {
cout << "File could not be opened." << endl;
return 1;
}
// read and sort input by last then first name
bool successfulRead = sortInput(infile, students, size);
// display list, histogram, and class average
if (successfulRead) {
displayList(students[], size);
// setHistogram(... you figure parameters ...);
// displayHistogram(... you figure parameters ...);
// average = findAverage(... you figure parameters ...);
cout << "Average grade: " << average << endl << endl;
}
return 0;
}
bool sortInput(ifstream infile, StudentType students[], int size)
{
while(infile)
{
StudentType temp;
infile >> temp.last >> temp.first >> temp.grade;
//for(int i = MAXSIZE-1; i > MAXSIZE-1-size; i--)
for(int i = size; i > 0; i--)
{
if(strcmp(temp.last, students[i].last) < 0)
{
//copy current name and grade down
//strcopy(students[i+1].last, students[i].last);
students[i+1] = students[i];
}
else if(strcmp(temp.last, students[i].last) == 0 && strcmp(temp.first, students[i].first) < 0))
{
//copy/assign current name and grade down
students[i+1] = students[i];
}
else
{
//found right place, break out of loop
break;
}
}
//now that you've made room, insert (copy) new name into correct sorted position
students[i] = temp;
}
return true;
}
void displayList(StudentType students[], int size)
{
cout << "List of names sorted:" << end1;
for(int i = 0; i < size; i++)
{
cout << " " << student[i].grade << " " << students[].last << " " << students[i].first << end1;
}
}
// ----------------------------------------------------------------------------
// functions with meaningful doxygen comments and assumptions go here
Я столкнулся с этим сам. Проблема в том, что sortInput
занимает ifstream
по значению, а не по ссылке. ifstream
не любят, когда их копируют. Просто измените объявление на:
bool sortInput(ifstream&, StudentType, int);
Обратите внимание &
Других решений пока нет …