来自多个类的友元模板函数
Friending template function from multiple classes
我有这个代码:
template<typename T> T f() {
// ...
}
class A {
friend A f();
};
class B {
friend B f();
};
我收到ambiguating new declaration of ‘B f()’
错误。
但是,如果我将代码更改为以下
template<typename T> void f(T arg) {
// ...
}
class A {
friend void f(A);
};
class B {
friend void f(B);
};
程序编译精细。
有人可以帮我找出问题所在吗?
friend A f();
此行声明非模板函数A f()
存在,并且是类的友元。 这与f<A>()
功能不同 - 它是一个全新的功能。
friend B f();
此行声明另一个具有相同名称但返回类型不同的非模板函数。 您不能重载函数的返回类型,因此禁止这样做。
这些 friend 声明都不引用您的模板函数,在您的第二个示例中,两个 friend 声明仍然不引用先前声明的模板函数;它们引用其他一些非模板函数,就像您的第一个示例中的 friend 声明一样。
这可能是你的意思:
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);
};
相关文章:
- C++模板来检查友元函数的存在
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- C++ 友元函数和私有构造函数
- 使第二个类的构造函数成为第一个类中的友元函数
- 未定义的类模板不会实例化以检查友元函数
- C++类中的友元函数有问题?
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 模板类中的模板友元函数
- C++ 17 个友元函数声明和内联命名空间
- 友元函数需要一个帮助程序函数
- 在类内定义的友元函数与类外定义的友元函数的查找规则之间的差异
- 运算符重载在 C++ 中使用友元函数
- 类C++友元函数无法访问封装的类
- 函数指针作为友元函数