Странные ошибки из-за STL
От: Аноним  
Дата: 18.09.02 15:36
Оценка:
Hi, All

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

#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'".
Такое ощущение, что он не понял, что они — друзья. Если же убрать директиву "using namespace std;", то все работает замечательно. Следовательно, это из-за STL. Например, на operator+ компилер выдаст INTERNAL COMPILER ERROR. У меня не было времени покопаться в заголовниках STL, чтобы понять причину таких странных ошибок, но даже если там происходит какая-то колизия имен, то все-равно ошибки должны быть другого сорта (ну например "already declared" или "types mismatch").

Не подскажите причину такого поведения?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.