读书人

设模板函数为友元时出错,该如何解决

发布时间: 2012-02-10 21:27:42 作者: rapoo

设模板函数为友元时出错
vc7.1

namespace Test
{
template <typename T>
inline void get( T & t )
{
}

class A
{
template <typename T>
friend inline void get( T & t );
};
}

class B
{
friend class A;

int value;
};

namespace Test
{
template <>
inline void get( B & b )
{
b.value = 0;
}
}

error C2248: “B::value” : 无法访问 private 成员(在“B”类中声明)


[解决办法]
C++ 中,
友元关系不能传递
[解决办法]
有些“好像”其实不是那么真的“像”。友元不能传递,你现在的代码是错的。
boost的代码,你也肯定没看仔细。
[解决办法]
C++ 中,
友元关系不能传递
所以 get 可以访问 A 的private 成员,
但是无法访问 B 的private 成员,
导致出错

同意

读书人网 >C++

热点推荐