Re[3]: Это глюк компилятора
От: jazzer Россия Skype: enerjazzer
Дата: 19.09.02 06:57
Оценка:
Здравствуйте Stanley Kay, Вы писали:

SK>Здравствуйте Андрей Тарасевич, Вы писали:


АТ>>"Работать замечательно" это никак не может. Этот код не должен компилироваться ни с 'using namespace std', ни без. Если он у тебя компилируется, то это действительно глюк компилятора.


SK>Да да я извиняюсь. Просто я сначала писал шаблонный класс — не сработало, я подумал, что дело в шаблонах (VC++ не совсем хорошо с ними дружит) и уже начал писать вопрос в конфу, а потом обнаружил, что и без шаблонов не прет, а operator<< просто забыл переписать нормально. Короче вот точный код:

SK>

SK>#include <iostream>
SK>#include <vector>
SK>using namespace std;

SK>class A
SK>{
SK>public:
SK>    friend std::ostream& operator<< (std::ostream& os, const A& a);
SK>    friend bool operator < (A&, A&);
SK>private:
SK>    int m_i;
SK>};

SK>
SK>bool operator < (A& a1, A& a2)
SK>{
SK>    return (a1.m_i < a2.m_i);
SK>}

SK>
SK>std::ostream& operator<< (std::ostream& os, const A& a)
SK>{
SK>    os << a.m_i;
SK>    return os;
SK>}

SK>void main()
SK>{
SK>} 
SK>


SK>И я по прежнему утверждаю, что VC++ выдает "error C2248: 'm_i' : cannot access private member declared in class 'A'". Но если я убираю "using namespace std;", то все компилиться без ошибок.

SK>Далее хочу сказать, что operator<< и operator< я выбрал совершенно случайно, без всякого умысла, чисто для теста. И если, например, объявить (даже определять не надо) operator+ то компилер выдаст "fatal error C1001: INTERNAL COMPILER ERROR".

Только что я откомпилировал его компилятором CC: Sun WorkShop 6 update 1 C++ 5.2 2000/09/11
Единственное, на что он ругнулся:
Warning (Anachronism): main() must have a return type of int.

Как Вам правильно советовали, поставьте последний ServicePack. Или перейдите на VC7.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.