Форум программистов, компьютерный форум CyberForum.ru

Перегрузка оператора вывода в поток - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 99, средняя оценка - 4.89
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 09:39     Перегрузка оператора вывода в поток #1
Собственно есть программка (большинство функций выкинул чтобы не запутывали) по работе с дробными числами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# include <iostream>
# include <iomanip>
using namespace std;
 
class RationalNumber
{
friend ostream &operator<<(ostream &output, const RationalNumber &abc);
public:
    // констркутор по умолчанию, проверяет что дробная часть >0
    // +проверяет можно ли сократить дробь
    RationalNumber(int a=1, int b=1)
    {
        nominator=(a>0) ? a:1;
        denominator=(b>0)? b:1;
        for (int i=2;i<=nominator;i++)
         if (denominator%i==0 && nominator%i==0 )
         {
             nominator/=i;
             denominator/=i;
         }
 
    }
 
    // возможность сложения двух объектов класса RationalNumber
    RationalNumber operator+(RationalNumber &right)
    {
        if (denominator==right.denominator) //если знаменатели равны
         return RationalNumber(nominator+right.nominator,denominator);
        int temp; //иначе
        temp=denominator*right.denominator; // определяем новый знаменатель
        return RationalNumber(((temp/denominator*nominator)+(temp/right.denominator*right.nominator))
        ,temp);
    }
 
 
private:
    int nominator; // числитель
    int denominator; // знаменатель
};
 
ostream &operator<<(ostream &output, const RationalNumber &abc)
{
    output<<abc.nominator;
        if (abc.denominator>1) //если знаменатель не =1 (число не целое)
     output<<"/"<<abc.denominator<<endl;
     return output;
}
 
 
int main()
{
    RationalNumber a(17,10);
    RationalNumber b(20,10);
    RationalNumber c;
    cout<<"A: "<<a;
    cout<<"B: "<<b<<endl;
    cout<<(c=a+b); // МОЖНО в любом случае
    cout<<(a+b); // НЕЛЬЗЯ если объект в функции вывода не const или же если не передаёться копия объекта
}
Программа работает, но мне стало интересно почему если в перегрузке оператора вывода написать
C++
1
ostream &operator<<(ostream &output, RationalNumber &abc)
вместо
C++
1
ostream &operator<<(ostream &output, const RationalNumber &abc)
то в main уже будет невозможно вывести в поток (a+b), хотя присвоить c и вывести всё равно можно (c=a+b) ? Ведь я ставлю const только для передаваемого функции объекта и это не влияет же никак на возвращаемый результат.
Также можно делать копию объекта при передаче и тогда программа тоже будет компилироваться
C++
1
ostream &operator<<(ostream &output, RationalNumber abc)
Но мне всё же интересен первый случай, когда мы программе передаём сам объект без const и почему именно так тогда нельзя выводить в поток (a+b) например.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2011, 09:39     Перегрузка оператора вывода в поток
Посмотрите здесь:

C++ перегрузка оператора вывода
C++ Перегрузка оператора вывода
C++ Перегрузка оператора вывода
Перегрузка оператора вывода C++
Error: Перегрузка оператора вывода в поток, виртуальные методы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
18.03.2011, 10:16     Перегрузка оператора вывода в поток #2
А у вас какой компилятор?
VC2003, 2005, 2008 нормально все варианты переваривает и не ругается. Рузультаты выполнения тоже одинаковые
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
18.03.2011, 11:19     Перегрузка оператора вывода в поток #3
Gepar, А нефиг в оператор вывода, который никаким раком не должен менять объект, передавать неконстантную ссылку на объект.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 13:14  [ТС]     Перегрузка оператора вывода в поток #4
ForEveR, так а я и не спросил как надо, я спросил почему так.
bigredcat, хммм, сейчас попробую в vs.

Добавлено через 1 час 7 минут
Как бы его ещё откомпилировать в vs2010 чтобы этого не было:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
1>Построение начато 18.03.2011 12:02:40.
1>InitializeBuildStatus:
1>  Обращение к "Debug\New2.unsuccessfulbuild".
1>ClCompile:
1>  New2.cpp
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(15): error C2143: синтаксическая ошибка: отсутствие ";" перед "'template<'"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(15): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): error C2143: синтаксическая ошибка: отсутствие "," перед "<"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(860): см. ссылку на создание экземпляров класса шаблон при компиляции "basic_istream<_Elem,_Traits>"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(22): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(23): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(24): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(25): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(26): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2071: basic_istream<_Elem,_Traits>::__CLR_OR_THIS_CALL: недопустимый класс хранения
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(29): error C2061: синтаксическая ошибка: идентификатор "_Mysb"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(37): error C2473: _Uninitialized: выглядит как определение функции, но без списка параметров.
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C2059: синтаксическая ошибка: this
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(39): warning C4183: _Addstd: отсутствие возвращаемого типа; предполагается функция-член, возвращающая "int"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(42): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "__CLR_OR_THIS_CALL"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(923): error C2143: синтаксическая ошибка: отсутствие "," перед "<"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(965): см. ссылку на создание экземпляров класса шаблон при компиляции "basic_iostream<_Elem,_Traits>"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(928): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(929): error C2059: синтаксическая ошибка: <
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(929): error C2238: непредвиденные лексемы перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_iostream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2071: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: недопустимый класс хранения
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2143: синтаксическая ошибка: отсутствие ")" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(936): error C2334: непредвиденные лексемы перед ":"; пропуск вероятного тела функции
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(942): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "basic_iostream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(942): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(950): error C2143: синтаксическая ошибка: отсутствие ";" перед "="
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(951): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "swap"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2182: __CLR_OR_THIS_CALL: недопустимое использование типа "void"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(956): error C2040: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: "int" отличается по уровням косвенного обращения от "basic_iostream<_Elem,_Traits> &"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(957): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(960): warning C4183: swap: отсутствие возвращаемого типа; предполагается функция-член, возвращающая "int"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C2143: синтаксическая ошибка: отсутствие ";" перед "~"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C2433: basic_iostream<_Elem,_Traits>::__CLR_OR_THIS_CALL: "virtual" не разрешается для объявлений данных
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(962): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "ws"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2433: __CLRCALL_OR_CDECL: "inline" не разрешается для объявлений данных
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2530: __CLRCALL_OR_CDECL: ссылки должны быть инициализированы
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1137): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1170): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1170): error C2062: тип "char" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2062: тип "char" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1171): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1172): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1177): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1178): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1178): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1179): error C2039: sentry: не является членом "basic_istream"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): см. объявление "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1182): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2065: ctype: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1184): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1187): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1187): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1188): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1189): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1190): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1191): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1193): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1194): error C2039: space: не является членом "`global namespace'"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C3861: to_char_type: идентификатор не найден
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1195): error C2143: синтаксическая ошибка: отсутствие "," перед ")"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1198): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1201): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1203): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1205): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1205): error C2062: тип "wchar_t" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2065: char_traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2062: тип "wchar_t" не требуется
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1206): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1207): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1212): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1213): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1213): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2065: _Traits: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1214): error C2039: sentry: не является членом "basic_istream"
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(18): см. объявление "basic_istream"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1217): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2065: ctype: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2065: _Elem: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1219): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1222): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1222): error C2143: синтаксическая ошибка: отсутствие ")" перед ";"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1223): error C2059: синтаксическая ошибка: )
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2653: _Traits: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1224): error C2065: _Meta: необъявленный идентификатор
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1225): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1226): error C2653: ios_base: не является именем класса или пространства имен
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1228): error C2143: синтаксическая ошибка: отсутствие ";" перед "}"
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\istream(1228): fatal error C1003: число ошибок превышает 100; остановка компиляции
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.38
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.03.2011, 16:17     Перегрузка оператора вывода в поток #5
Хм. Ему не нравится istream... Может, побилось там что-нибудь?

Добавлено через 2 минуты
Можно попробовать студию перезапустить.
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 17:54  [ТС]     Перегрузка оператора вывода в поток #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
Можно попробовать студию перезапустить.
Ты и правда думаешь что я пк вижу впервые?

Цитата Сообщение от silent_1991 Посмотреть сообщение
Хм. Ему не нравится istream... Может, побилось там что-нибудь?
Это я тоже заметил по той ошибке что эта vs мне выдала.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.03.2011, 18:03     Перегрузка оператора вывода в поток #7
Gepar, ну тогда переставьте студию))) У меня больше вариантов нету, почему вдруг компилятору не нравится код, который раньше работал, был написан не вами и вы его вряд-ли меняли...
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 18:20  [ТС]     Перегрузка оператора вывода в поток #8
silent_1991, код то написан мной, но не в vs.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.03.2011, 18:24     Перегрузка оператора вывода в поток #9
Gepar, а, ну ваш код у меня прекрасно работает в обоих вариантах. Это я говорил об ошибках, которые вам студия выдала. Кстати, код как раз в 2010-й студии прекрасно заработал.
А всё-таки, вы каким компилятором пользуетесь?
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 18:39  [ТС]     Перегрузка оператора вывода в поток #10
silent_1991,minigw (порт GCC с линукса).
А вообще я разобрался почему код без const у меня не компилировался - в этом помогла википедия:
параметры ссылки, не помеченные const, могут только быть адресуемыми значениями:
вот только ms наверное не так строго придерживается стандарта c++.
А вот что с vs2010 моей я не знаю, попробую поставить английскую версию, всё равно в русской я не увидел что хотел, а даже наоборот перевод поначалу напугал.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
18.03.2011, 18:50     Перегрузка оператора вывода в поток #11
Да, действительно, Code::Blocks с дефолтным MinGW не захотел компилировать. Ну, с другой стороны, прислушайтесь к словам ForEveR, принцип наименьших привилегий не зря существует. Всё, что можно, нужно делать const.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2011, 22:36     Перегрузка оператора вывода в поток
Еще ссылки по теме:

Перегрузка оператора вывода C++
Перегрузка вывода в поток C++
C++ Перегрузка оператора запись в поток

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gepar
 Аватар для Gepar
1173 / 529 / 20
Регистрация: 01.07.2009
Сообщений: 3,511
18.03.2011, 22:36  [ТС]     Перегрузка оператора вывода в поток #12
silent_1991, так дело не в этом же, мне изначально стало интересно почему нельзя было без const скомпилировать. Одно же дело "хороший тон" , а другое синтаксическая ошибка, ну да вики в принципе объяснила что это строго по стандарту так идёт так что тогда понятно что это не просто тараканы тех кто портировал GCC под windows.
Yandex
Объявления
18.03.2011, 22:36     Перегрузка оператора вывода в поток
Ответ Создать тему
Опции темы

Текущее время: 12:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru