几个关键点:

  需要前置声明!--奇怪的是别人告诉我也可以不需要,但我这里不行!

  友元函数的函数名后面的<>,必须要有。

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 //前置声明,你妹啊
 6 template<class T> class A;
 7 template<class T> ostream &operator<< (ostream &out, const A<T> &_a);
 8 template<class T1, class T2> class B;
 9 template<class T1, class T2> ostream &operator<< (ostream &out, const B<T1, T2> &_b);
10 
11 template<class T> class A
12 {
13 public:
14     A(){}
15     A(T _a, T _b):a(_a),b(_b){}
16     ~A(){}
17 private:
18     T a;
19     T b;
20 
21     friend ostream &operator<< <> (ostream &out, const A<T> &a);
22 };
23 
24 template<class T> ostream &operator<< (ostream &out, const A<T> &_a){
25     out<<_a.a<<"--"<<_a.b;
26     return out;
27 }
28 
29 template<class T1, class T2> class B: public A<T1>
30 {
31 public:
32     B(){}
33     B(T1 _a, T1 _b, T2 _c):A<T1>(_a,_b),c(_c){} //A<T1>
34     ~B(){}
35 private:    
36     T2 c;
37 
38     friend ostream &operator<< <>(ostream &out, const B<T1, T2> &_b);
39 };
40 template<class T1, class T2> ostream &operator<< (ostream &out, const B<T1, T2> &_b){
41     // out<<(A<T1>)_b;
42     // out<<"--"<<_b.c;
43 
44     out<<(A<T1>)_b<<"--"<<_b.c;
45     return out;
46 }
47 
48 int main(int argc, char const *argv[])
49 {
50     A<int> x(1, 3);
51     B<char, int> y('a', 'b', 5);
52 
53     cout<< x <<endl;
54     cout<< y <<endl;
55 
56     return 0;
57 }
View Code

相关文章:

  • 2022-12-23
  • 2022-02-09
  • 2021-06-15
  • 2022-01-25
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
  • 2022-01-27
  • 2022-12-23
  • 2021-09-04
相关资源
相似解决方案