fraction f1(2,5);
cout << f1;
Ошибка при написании дружественной функции operator<< для моего класса
Код:
просто напросто печатала "2/5".
Для этого я(все по книжке) обьявил дружественную функцию в классе fraction(чтоб она имела доступ к закрытым членам):
Код:
public:
friend ostream &operator<<(ostream &os, fraction &fract);
и уже вне класса определил саму функцию:
оstream &operator<<(ostream &os, fraction &fract){
os << fract.num << "/" << fract.den;
return os;
}
friend ostream &operator<<(ostream &os, fraction &fract);
и уже вне класса определил саму функцию:
оstream &operator<<(ostream &os, fraction &fract){
os << fract.num << "/" << fract.den;
return 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.
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...
//создаешь объект твоего класса и сразу передаешь значения
fraction f1(2,5);
//а где-то в конструкторе
//fraction::fraction(int x,int y)
{
cout<< x << "/" << y;
}
(на экране будет 2/5)
ты предлагаешь в конструктор добавить печать сообщения, но я хочу сделать, что бы в любом месте программы можно было отобразить экземпляр моего класса
Да и вобще я же только учусь, и мне важно по человечески понять как работают friend функции и что в этом коде некорректно. Код то из книжки почти один в один^_^
Код:
#include <iostream>
std::оstream &operator<<(std::ostream &os, fraction &fract){
os << fract.num << "/" << fract.den;
return os;
}
std::оstream &operator<<(std::ostream &os, fraction &fract){
os << fract.num << "/" << fract.den;
return os;
}
.....ведь не поймешь по этим сообщениям компилятора в чем проблема....или поймешь???
Нет бы он сказал что то вроде "ostream - не знаю такого обьекта", так нет...
спасибо, сегoдня буду спать спокойно^_^
Нет бы он сказал что то вроде "ostream - не знаю такого обьекта", так нет...
[/QUOTE]
7) D:\coding\c++\fraction\fraction_class.h(123) : error C2501: 'ostream' : missing decl-specifiers