2015-04-01 4 views
0

Заранее благодарим за любую помощь! Эта программа является программой регистрации студентов.C++ ostream: оператор не соответствует << и ожидаемый инициализатор до '&' token

Данные взяты из файла и результаты не найдены. Тогда общей идеей является изучение C++, перегрузка метода - включая операторы и fstream. Я отправлю код, на который указывает компилятор, но, пожалуйста, дайте мне знать, хотите ли вы увидеть другой код.

Когда я иду, чтобы построить ошибку компилятора, указывает на мой метод файла заголовка, вне моего класса, но внутри #endif. Смотри ниже.

std::ostream & operator << (std::ostream & os, const Registration & R); 

Реализация этого файла, как например:

std::ostream &operator <<(std::ostream & os, const Registration & R ) 
{ os << "Student ID: " << R.GetStudentId() << "\n" 
     << "Semester: " << R.GetSemester() << "\n \n"; 

for(unsigned i = 0; i < R.GetCount(); i++) 
{ 
    os << "\tUnit Name : " << R.GetName(i) << "\n" 
     << "\tUnit Id : " << R.GetId(i) << "\n" 
     << "\tCredit Points : " << R.GetCredits(i) << "\n" 
     << "\tStudent Mark : " << R.GetResult(i) << "\n" 
     << "\tDate : " << R.GetDay(i) << " " << R.GetMonth(i) << " " << R.GetYear(i) << "\n\n"; 
} 

os << "Total Credits :" << R.GetCredits() << "\n" 
    << "Number of Units : " << R.GetCount() << "\n" 
    << "Average Mark : " << R.GetAverage(); 

return os; 
} 

И главный()

int main() 
{ 
ifstream infile("rinput.txt"); 
if(!infile) return -1; 

Registration R; 
infile >> R; 

ofstream ofile("routput.txt"); 

ofile << R; // Error Here RE- no match for 'operator<<' 

cout << "\nComputation completed. Check output file. \n"; 

return 0; 
} 

Еще раз спасибо за любые и все помощь, надеюсь, что это не ошибка новобранец ... поздно, когда я.

Редактировать: У меня есть «using namespace std» & #include во всех файлах заголовков.

+1

Вы забыли '#include '. –

+0

@Kerrek - Имейте это во всех моих заголовочных файлах :) –

+0

@MasterSketchiggle Пожалуйста, разместите [MCVE] (http://stackoverflow.com/help/mcve), который позволяет всем воспроизводить ваши ошибки. –

ответ

0

Этот код действителен, за исключением:

  • Необходимость #include <iostream>
  • нужно либо добавить using namespace std; или добавить std:: перед тем ifstream, ofstream и cout.
  • Необходимо перегрузить istream для вашего Registration класс.

Редактировать: Пожалуйста, добавьте std::, а не using namespace std;. Я только упомянул об этом для полноты. :)

+2

_ «Нужно либо добавить' using namespace std; '" _ Это вызывает у меня физическую боль. –

+0

Я согласен и буду редактировать выше. –

+0

В uni atm. И на этом этапе мы учил использовать «using namespace std» Могу ли я спросить, почему кажется, что вы предлагаете мне всегда ставить std :: при кодировании? Кроме того, у меня есть iostream во всех заголовках и есть «использование пространства имен std» во всех заголовках. I перегрузили istream для класса Registration, но не включили код, поскольку ошибки, похоже, не связаны с этим. Должен ли я обновить вопрос с включенным? –