Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2012, 16:08   #1
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию Перегрузка вывода

Здравствуйте. Перегрузку оператора << осуществил для своего класса :
Код:
	ostream & operator << (ostream &s, const Student & ss)
	{
		s.setf(ios::left);
		return s << setw(6) << ss.FirstName 
			     << setw(9) << ss.LastName 
				 << setw(8) << ss.Course 
			     << endl;
	}
А вот если переношу в header - ничего не работает:
header:
Код:
...
ostream & operator << (ostream &s, const Student & ss);
...
cpp:

Код:
...
ostream& Student::operator << (ostream &s, const Student & ss)
	{
		s.setf(ios::left);
		return s << setw(6) << ss.FirstName 
			     << setw(9) << ss.LastName 
				 << setw(8) << ss.Course 
			     << endl;
	}
...
Подскажите где ошибка.Спс.
Arrioh вне форума Ответить с цитированием
Старый 27.08.2012, 16:53   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Ничего не работает? Что по этому поводу говорит компилятор?

Перенесли в хедер... а там куда вставили? Может Student:: забыли?
p51x вне форума Ответить с цитированием
Старый 30.08.2012, 17:54   #3
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию

Ввел изменения:
Header:

Цитата:
#ifndef STUDENT
#define STUDENT
#include <vector>
#include <string>
#include <iomanip>
#include <fstream>
using namespace std;

class Student
{
private:
string FirstName;
string LastName;
int year;
public:
Student(string FirstName, string LastName, int year);

ostream & operator << (ostream &s);
};
#endif;
cpp:
Цитата:
Student::Student(string AFirstName, string ALastName, int aYear):
FirstName(AFirstName),LastName(ALas tName), year(aYear){}

ostream& Student:perator << (ostream &s)
{
s.setf(ios::left);
return s << setw(6) << this->FirstName
<< setw(9) << this->LastName
<< setw(8) << this->year
<< endl;
}
Arrioh вне форума Ответить с цитированием
Старый 30.08.2012, 17:55   #4
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию

Вот какую бурду выдает VS:
Цитата:
1>------ Build started: Project: STL, Configuration: Release Win32 ------
1> main.cpp
1>main.cpp(7): error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Student' (or there is no acceptable conversion)
1> C:\Program Files\Microsoft Visual Studio 10.0\VC\include\ostream(679): could be 'std::basic_ostream<_Elem,_Traits> &std:perator <<<char,std::char_traits<char>>(std ::basic_ostream<_Elem,_Traits> &,const char *)'
1> with
1> [
1> _Elem=char,
1> _Traits=std::char_traits<char>
1> ]


...........................


1> while trying to match the argument list '(std:stream, Student)'
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Arrioh вне форума Ответить с цитированием
Старый 30.08.2012, 18:06   #5
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию

Я понял.... перегрузку нужно было сделать friend. Хотя еще не совсем понял зачем ее делать friend если она и так часть класса
Arrioh вне форума Ответить с цитированием
Старый 30.08.2012, 19:46   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,716
По умолчанию

Потому что в данном случае вам надо было бы перегружать метод std::basic_ostream, а не вашего.

Т.к. не камильфо менять СТД, то френд.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перегрузка оператора вывода в шаблонном классе Anubys Общие вопросы C/C++ 3 14.03.2012 15:15
c++ перегрузка потокового ввода/вывода. tanek Помощь студентам 5 07.12.2011 19:53
Перегрузка + Blad47 Помощь студентам 4 21.03.2011 01:49
Перегрузка в С++ anna01 Помощь студентам 1 24.11.2010 12:52
Перегрузка в С++ anna01 Общие вопросы C/C++ 2 23.11.2010 22:21