c – 在实例化模板时无法访问类错误中声明的私有成员

前端之家收集整理的这篇文章主要介绍了c – 在实例化模板时无法访问类错误中声明的私有成员前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的代码如下
template <typename T>

class name
{
public:
    name() : h_(0){}

    template <typename U>
    operator name<U>()
    {
        name<U> u;
        u.h_ = h_;
        return u;
    }
private:
    int h_;
};

int main(void)
{
    name<int> a;
    name<double> b = a;
    return 0;
}

我得到的错误是int name< double> :: h_是private.如何修复错误

解决方法

命名< INT>和名称< double>是不同的实例,因此实际上是不同的类.默认情况下,他们的私人成员无法共享.你需要命名< T>所有其他名字的朋友.
template <typename T>

class name
{
public:
    name() : h_(0){}

    template <typename U>
    operator name<U>()
    {
        name<U> u;
        u.h_ = h_;
        return u;
    }
private:
    int h_;
    template <typename>   // <--
    friend class name;   // <--
};

int main(void)
{
    name<int> a;
    name<double> b = a;
    return 0;
}

猜你在找的C&C++相关文章