如何在不改变int数据状态的情况下编译以下代码?
template<typename U>
void Test(U);
template< class T >
class B {
int data;
public:
friend void Test<>( T );
};
template<typename U>
void Test(U u) {
B < int> b1;
b1.data = 7;
}
int main(int argc, char *argv[])
{
char i;
Test(i);
system("PAUSE");
return 0;
}
上述代码导致编译器错误,因为b1.data
在Test
U = char
中是私有的。
答案 0 :(得分:1)
问题在于您正在与Test<U>
成为B<U>
的朋友(对于相同的U),但您正尝试从B<int>
访问Test<char>
的内部(不同的U)。
制作任何B的任何测试朋友可能是最简单的。
答案 1 :(得分:0)
这是使用VS2008编译的。不确定它是否符合标准。
#include <cstdlib>
template<typename U> void Test(U);
template< class T > class B {
int data;
public:
template <typename U > friend void Test(U);
};
template<typename U>
void Test(U u){
B < int> b1;
b1.data = 7;
}
int main(int argc, char *argv[])
{
char i;
Test(i);
system("PAUSE");
return 0;
}