Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при написании дружественной функции operator<< для моего класса

7.0K
24 октября 2006 года
pink master
79 / / 21.10.2006
Я хочу что бы мой класс fraction(дробь) мог взаимодействовать с обьектом "cout" и вторая строчка выражения :
 
Код:
fraction f1(2,5);
cout << f1;

просто напросто печатала "2/5".
Для этого я(все по книжке) обьявил дружественную функцию в классе fraction(чтоб она имела доступ к закрытым членам):
 
Код:
public:
friend ostream &operator<<(ostream &os, fraction &fract);
и уже вне класса определил саму функцию:
оstream &operator<<(ostream &os, fraction &fract){
    os << fract.num << "/" << fract.den;
    return os;
}
Вроде логика понятна(в левый обьект на входе - cout, он же os, послать числитель и знаминатель и венуть его)
Но вместо ожидаемого компилятор выдаёт 13 ошибок=(

Код:
Compiling...
index.cpp
1) D:\coding\c++\fraction\fraction_class.h(21) : error C2433: 'ostream' : 'friend' not permitted on data declarations
2) D:\coding\c++\fraction\fraction_class.h(21) : error C2501: 'ostream' : missing decl-specifiers
3) D:\coding\c++\fraction\fraction_class.h(21) : error C2143: syntax error : missing ';' before '&'
4) D:\coding\c++\fraction\fraction_class.h(21) : error C2061: syntax error : identifier 'ostream'
5) D:\coding\c++\fraction\fraction_class.h(21) : error C2501: '<<' : missing decl-specifiers
6) D:\coding\c++\fraction\fraction_class.h(21) : error C2805: binary 'operator <<' has too few parameters
7) D:\coding\c++\fraction\fraction_class.h(123) : error C2501: 'ostream' : missing decl-specifiers
8) D:\coding\c++\fraction\fraction_class.h(123) : error C2239: unexpected token '&' following declaration of 'ostream'
9) D:\coding\c++\fraction\fraction_class.h(123) : error C2059: syntax error : '&'
10) D:\coding\c++\fraction\fraction_class.h(125) : error C2143: syntax error : missing ';' before 'return'
11) D:\coding\c++\fraction\fraction_class.h(126) : error C2143: syntax error : missing ';' before '}'
12) D:\coding\c++\fraction\index.cpp(13) : error C2065: 'cout' : undeclared identifier
13) D:\coding\c++\fraction\index.cpp(13) : error C2677: binary '<<' : no global operator defined which takes type 'class fraction' (or there is no acceptable conversion)
Error executing cl.exe.


Сначало подумал что это из за того что у меня MSVC++ 5.0, скачал версию 2005, но результат тот же=(
не понимаю что говорит компилятор -
1) почему нельзя обьявлять? в этом классе без проблем уже определенны друзья : operator+ и operator-, и вобще почему data, если это функция?
8) Имеется ввиду &operator - почему "&" назван неизвестной меткой? Если я правильно понял книжку, это означает что оператор вернет ссылку на обьект. И опять же непонятно почему decloration of ostream, если ostream это просто возвращаемый тип?
=( Вобщем помогите новичку plz...
16K
24 октября 2006 года
slava-forever
21 / / 28.07.2006
Зачем так сложно,вот:

//создаешь объект твоего класса и сразу передаешь значения
fraction f1(2,5);
//а где-то в конструкторе
//fraction::fraction(int x,int y)
{
cout<< x << "/" << y;
}

(на экране будет 2/5)
7.0K
24 октября 2006 года
pink master
79 / / 21.10.2006
нет, извени, но разница принципиальна:
ты предлагаешь в конструктор добавить печать сообщения, но я хочу сделать, что бы в любом месте программы можно было отобразить экземпляр моего класса
Да и вобще я же только учусь, и мне важно по человечески понять как работают friend функции и что в этом коде некорректно. Код то из книжки почти один в один^_^
398
24 октября 2006 года
Alexandoros
630 / / 21.10.2005
VS2k5

 
Код:
#include <iostream>

std::оstream &operator<<(std::ostream &os, fraction &fract){
    os << fract.num << "/" << fract.den;
    return os;
}
7.0K
24 октября 2006 года
pink master
79 / / 21.10.2006
точно!!!! заработало=), всем спасибо^_^
.....ведь не поймешь по этим сообщениям компилятора в чем проблема....или поймешь???
Нет бы он сказал что то вроде "ostream - не знаю такого обьекта", так нет...
спасибо, сегoдня буду спать спокойно^_^
3
26 октября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=pink master]
Нет бы он сказал что то вроде "ostream - не знаю такого обьекта", так нет...
[/QUOTE]

7) D:\coding\c++\fraction\fraction_class.h(123) : error C2501: 'ostream' : missing decl-specifiers
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог