问问题
342 次
1 回答
13
friend A f();
这一行声明了非模板函数A f()
存在并且是类的友元。 这与功能不同f<A>()
——它是一个全新的功能。
friend B f();
这一行声明了另一个同名但返回类型不同的非模板函数。您不能重载函数的返回类型,因此这是禁止的。
这些友元声明都没有引用您的模板函数,在您的第二个示例中,两个友元声明仍然没有引用先前声明的模板函数;它们指的是其他一些非模板函数,就像第一个示例中的朋友声明一样。
这可能是你的意思:
class A {
friend A f<A>();
};
class B {
friend B f<B>();
};
并且,要修复您的第二个示例:
class A {
friend void f<A>(A);
};
class B {
friend void f<B>(B);
};
于 2015-01-13T21:32:37.000 回答