为何VC6下友员函数operator仍不能访问私有成员?编译报错!!
mmmcd 2005-03-22 12:15:24 #include<iostream>
using namespace std;
template <class T> class BaseType
{
friend ostream& operator<<(ostream & out, BaseType<int> & ele);
private:
T element;
public:
void setElement(T newElement);
T getElement();
};
template <class T>
void BaseType<T>::setElement(T newElement)
{
element = newElement;
}
template <class T>
T BaseType<T>::getElement()
{
return element;
}
template <class T>
ostream& operator <<(ostream& out, BaseType<T>& ele)
{
out<<"__"<<ele.element<<"__"<<endl;
return out;
}
int main()
{
BaseType<int> num,num2;
num.setElement(5);
num2.setElement(6);
cout<<num2;
return 0;
}
/////////////////////////////////////
//错误如下:
F:\MYPROJECTS\Assignment_2\Assignment_2.cpp(34) : error C2248: 'element' : cannot access private member declared in class 'BaseType<int>'
F:\MYPROJECTS\Assignment_2\Assignment_2.cpp(12) : see declaration of 'element'
F:\MYPROJECTS\Assignment_2\Assignment_2.cpp(45) : see reference to function template instantiation 'class std::basic_ostream<char,struct std::char_traits<char> > &__cdecl operator <<(class std::basic_ostream<char,struct std::char_traits<char
> > &,class BaseType<int> &)' being compiled
Error executing cl.exe.