如何让两个C++模板类互为友元类?
模板类互为友元的问题解决方法
你的代码中,Mydeque<T>和Iterator<T>互为友元的声明存在编译问题,根源是在定义Mydeque<T>时,Iterator<T>还未被声明,编译器无法识别它是模板类,导致创建Mydeque对象时出错。
修正步骤
- 提前声明模板类:在定义
Mydeque<T>之前,先声明Iterator<T>模板,让编译器知晓它的存在。 - 保持友元声明的正确性:确保两个类中都正确声明对应模板特化为友元。
修正后的完整代码
// 提前声明Iterator模板类 template <typename T> class Iterator; template <typename T> class Mydeque { private: T* data; int cap, sz; // 声明对应特化的Iterator为友元 friend class Iterator<T>; public: Mydeque(): cap(0), sz(0) // 构造函数 { // 初始化逻辑 } }; template<class T> class Iterator { public: private: size_t current; Mydeque<T>* container; // 声明对应特化的Mydeque为友元 friend class Mydeque<T>; }; // 测试用main函数 int main() { Mydeque<int> dq; return 0; }
说明
提前声明Iterator<T>后,编译器在处理Mydeque<T>的友元声明时,能正确识别Iterator<T>是模板类的特化,从而建立正确的友元关系,解决创建对象时的编译错误。
内容的提问来源于stack exchange,提问作者hobo
相关产品推荐
相关产品推荐

