我有以下继承结构:
template<unsigned int t>
class Base {
protected:
int a;
};
template<unsigned int t>
class Derived1 : public Base {
};
template<unsigned int t>
class Derived2 : public Base {
};
我想要的是让一个Derived1构造函数接受一个Derived2对象作为参数,然后访问基类中的受保护成员'a‘。
我在基类中添加了下面这行代码:
template<unsigned int u> friend class Derived2;
因此它看起来如下所示:
template<unsigned int t>
class Base {
protected:
int a;
template<unsigned int u> friend class Derived2;
};
当我编译它时,我得到了错误C2248:“无法访问在class Base中声明的受保护成员”
发布于 2018-03-15 06:08:15
如果你想从Derived1构造函数访问受保护的成员,那么你需要成为Derived1的朋友,而不是Derived2。
template<unsigned int t>
class Base {
protected:
int a;
template<unsigned int u> friend class Derived1; // here
};
template <unsigned int>
class Derived2;
template<unsigned int t>
class Derived1 : public Base<t> {
public:
Derived1(Derived2<t>& d2) {
cout << d2.a << endl;
}
};
template<unsigned int t>
class Derived2 : public Base<t> {
};
int main() {
Derived2<1> d2;
Derived1<1> d1(d2);
return 0;
}
https://stackoverflow.com/questions/49291143
复制相似问题