![](/img/trans.png)
[英]Cannot access private member declared in class, even declared friend class
[英]Friend functions and namespaces. Cannot access private member in class
因此,我在foo
名称空间内有一个class
,其中包括一个friend
函数。 现在,我希望friend
函数的定义在不同的名称空间bar
以便您可以在下面看到它的方式。 我得到的错误是私有成员val
无法访问。
问题:为什么?
#include <iostream>
namespace foo
{
template<typename T>
class myclass
{
private:
T val;
public:
myclass(T v) : val(v) {}
template<class U>
friend void myfun(myclass<U>);
};
namespace bar
{
template<class U>
void myfun(myclass<U> a)
{
std::cout << a.val;
}
} //bar
} //foo
int main()
{
foo::myclass<int> a(5);
foo::bar::myfun(a);
}
您应该在朋友声明之前声明foo::bar::myfun
,并使用适当的名称空间限定( bar::
:
namespace foo
{
template<typename T>
class myclass;
namespace bar
{
template<class U>
void myfun(myclass<U> a);
} //bar
template<typename T>
class myclass
{
private:
T val;
public:
myclass(T v) : val(v) {}
template<class U>
friend void bar::myfun(myclass<U>);
};
} //foo
否则,将通过朋友声明在foo
名称空间中声明另一个名为myfun
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.