当在类内部定义好友函数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;
}
'B(const A&)'是一个转换构造函数,不是复制构造函数。您也没有指定编译时得到的错误。 –
错误是'错误:使用未声明的标识符'mag''。 – danny