Re: Странные ошибки из-за STL
От: Андрей Тарасевич Беларусь  
Дата: 18.09.02 17:52
Оценка:
Здравствуйте Аноним, Вы писали:

А>Посмотрите на следующий код:


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

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

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

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

А>


А>VC++ компилятор выдает ошибку: "error C2248: 'm_i' : cannot access private member declared in class 'A'".

А>Такое ощущение, что он не понял, что они — друзья.

А почему он должен был это понять? Шаблонная функция 'operator<<' в твоем примере другом класса 'A' не является. Неудивительно, что компилятор ругается не ее попытки доступиться к 'm_i'.

А>Если же убрать директиву "using namespace std;", то все работает замечательно.


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