繁体   English   中英

朋友函数和名称空间。 无法访问班级中的私人成员

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM