下面显示的代码在类内定义友元函数 mag() 时无法编译,但如果在类外定义(已注释)则有效。我认为差异是由用于将参数类型从 A 更改为 B 的复制构造函数引起的。有人可以解释为什么我应该在外面定义朋友函数吗?
而且,如果B类是一个模板类(template <class T>
在顶部添加),在外面定义友元函数也是行不通的。
#include <iostream>
using namespace std;
class A {
};
class B {
public:
B(const A& p) {
std::cout << "Copy/Conversion constructor" << std::endl;
}
friend void mag(const B& p) {
std::cout << "Mag Inside`.\n";
}
};
//void mag(const B& p) {
// std::cout << "Mag Outside.\n";
//}
int main() {
A a;
mag(a);
return 0;
}