Здравствуйте 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.