加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:29:28 所属栏目:百科 来源:网络整理
导读:我的代码如下 template typename Tclass name{public: name() : h_(0){} template typename U operator nameU() { nameU u; u.h_ = h_; return u; }private: int h_;};int main(void){ nameint a; namedouble b = a; return 0;} 我得到的错误是int name doub
我的代码如下
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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读