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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2010, 20:30   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию перегрузка операций в си++

Добрый вечер.
столкнулся с проблемой,что компилятор сильно ругается на 2 строчки связанные с перегрузкой.

Хидер файл (С.h):
Код:
#include <iostream>

class A {
friend ostream &operator<< (ostream &, const A &);//больше всего ругается на эти 2 строчки
friend istream &operator>> (istream &, A &);

    private:
    int B;
}
Исполняемый C.cpp
Код:
#include"C.h"
#include <iostream>

ostream &operator<< (ostream &output,const A &number){
    output << number.B;
    return output;
}
istream &operator>> (istream &output,const A &number){
input.B;
return input;
}
Собственно главный файл (main.cpp)
Код:
#include <iostream>
#include"C.h"
using namespace std;

int main()
{
   A model;
 cin >> model;
      cout<<model<<endl;

}
Подскажите пожалуйста где ошибочка..

Последний раз редактировалось Serjuk; 20.03.2010 в 20:49.
Serjuk вне форума Ответить с цитированием
Старый 20.03.2010, 20:41   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А как именно ругается? И почему в C.h вторым параметром какой-то engine, а в остальных A?
netrino вне форума Ответить с цитированием
Старый 20.03.2010, 20:51   #3
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ostream и istream находятся в std
NiCola999 вне форума Ответить с цитированием
Старый 20.03.2010, 20:52   #4
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

это я ошибся,когда печатал)
ругается
error: ISO C++ forbids declaration of `ostream' with no type|
error: `ostream' is neither function nor member function; cannot be declared friend|
error: expected `;' before '&' token|
error: ISO C++ forbids declaration of `istream' with no type|
error: `istream' is neither function nor member function; cannot be declared friend|
error: expected `;' before '&' token|
In function `int main()':|
error: no match for 'operator>>' in 'std::cin >> model'|
Serjuk вне форума Ответить с цитированием
Старый 20.03.2010, 20:53   #5
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
ostream и istream находятся в std
поподробней пожалуйста..

кстати,что означает строчка using namespace std;? а то она является стандартной..
Serjuk вне форума Ответить с цитированием
Старый 20.03.2010, 21:10   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

using namespace std; говорит, чтобы компилятор самостоятельно искал все символы(имена переменных, классов и ф-ций) в пространстве имён std.
Иначе нужно указывать полный путь к этим символам
std:stream
std::istream
netrino вне форума Ответить с цитированием
Старый 20.03.2010, 21:14   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

вот это непонятно
Код:
istream &operator>> (istream &output,const A &number){
input.B;
return input;
}
где у тебя определен input?

Последний раз редактировалось NiCola999; 20.03.2010 в 21:32.
NiCola999 вне форума Ответить с цитированием
Старый 20.03.2010, 21:17   #8
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

istream и ostream находятся в стандартном пространстве имен std, поэтому вы сможете их использовать либо явно к ним обращаясь с префиксом std::
Код:
std::istream &operator>> (istream &, A &);
либо сделав все содержимое этого пространства имен глобальным (не рекомендуется)
Код:
using namespace std;
либо использую объявления using только для них:
Код:
using std::istream;
istream &operator>> (istream &, A &);
std::string s;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.03.2010, 21:19   #9
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
а разьве friend функции имеют доступ к private полям класса?
А для чего же они тогда еще?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 20.03.2010, 21:30   #10
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

заменил строчку :
Код:
friend ostream &operator<< (ostream &, const A &);
friend istream &operator>> (istream &, A &);
на
friend std::ostream &operator<< (ostream &, const A &);
friend std::istream &operator>> (istream &, A &);
все равно ругается но ошибок меньше
error: declaration of `operator<<' as non-function|
error: expected `;' before '(' token|
error: declaration of `operator>>' as non-function|
error: expected `;' before '(' token|
в маине
error: no match for 'operator>>' in 'std::cin >> model'|
error: no match for 'operator<<' in 'std::cout << model'
и еще мне компилятор выдает файл istream.tcc где много непонятного текста)))
Serjuk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь с лабой: «Перегрузка операций» (ООП, класс-АТД, на с++) Nastja Помощь студентам 15 02.07.2010 14:09
С++ перегрузка операций для шаблонного класса TIN Помощь студентам 7 29.03.2009 15:24
Класс матриц, перегрузка операций с матрицами andros Помощь студентам 1 26.12.2008 19:49
Конструктор, наследование, перегрузка операций Lioness Помощь студентам 18 02.06.2008 20:44