mmmcd 2005年03月22日
为何VC6下友员函数operator仍不能访问私有成员?编译报错!!
#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.
...全文
181 点赞 收藏 20
写回复
20 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告