當在類內部定義好友函數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