質問する
342 次
1 に答える
13
friend A f();
この行は、非テンプレート関数A f()
が存在し、クラスのフレンドであることを宣言します。 これは と同じ機能ではありませんf<A>()
-- 完全に新しい機能です。
friend B f();
この行は、同じ名前で別の非テンプレート関数を宣言していますが、戻り値の型は異なります。関数の戻り値の型をオーバーロードできないため、これは禁止されています。
これらのフレンド宣言はどちらもテンプレート関数を参照しておらず、2 番目の例では、2 つのフレンド宣言は以前に宣言されたテンプレート関数を参照していません。最初の例のフレンド宣言と同様に、他の非テンプレート関数を参照します。
これはおそらくあなたが意図したものです:
class A {
friend A f<A>();
};
class B {
friend B f<B>();
};
そして、2番目の例を修正するには:
class A {
friend void f<A>(A);
};
class B {
friend void f<B>(B);
};
于 2015-01-13T21:32:37.000 に答える