[問題] friend function 未宣告

看板C_and_CPP作者 (louis)時間8年前 (2015/11/19 07:17), 編輯推噓1(1011)
留言12則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) code_Block xcode VC++2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) no 問題(Question): 宣告了friend function 在主程式呼叫的時候 卻被編譯器說未宣告@@ 以下為我的程式架構 -------------------------------------------------- //A.h class A{ private: ... public: friend A foo(int a, int b); .... }; ---------------------------------------------------------- //A.cpp ... A foo(int a, int b) { A ans; ... return ans; } ------------------------------------------------- //main.cpp #include "A.h" int main(void) { A obj_A=foo(1,2); return 0; } 在code_Block xcode編譯的時候 都給我錯誤訊息說未宣告foo 但是我在VC++2008卻讓我過了!?@@ 想請問版上各位大神 我這樣的寫法有甚麼錯誤的嗎? 補充說明(Supplement): 後我在做測試的時候把 A foo(int a, int b) 改成 A foo(int a, int b, const A& temp) 這三個編譯器也都給我過了?! 天啊搞我我好亂啊 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.104.147.52 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1447888651.A.996.html

11/19 09:14, , 1F
main中 有宣告 foo嗎?
11/19 09:14, 1F

11/19 09:30, , 2F
main中要宣告??@@
11/19 09:30, 2F

11/19 10:26, , 3F
在 A.h 最後加上 A foo(int a, int b);
11/19 10:26, 3F

11/19 10:28, , 4F
gcc 4.5.2
11/19 10:28, 4F

11/19 10:29, , 5F
A foo(int a, int b, const A& temp) 也過不了
11/19 10:29, 5F

11/19 11:04, , 6F
事實上跟friend funtion declartion沒關係
11/19 11:04, 6F

11/19 11:40, , 7F
所以在class裡面那行不算已經宣告了?
11/19 11:40, 7F

11/19 11:41, , 8F
是我對friend有誤解就是了orz...
11/19 11:41, 8F

11/19 12:23, , 9F
應該說 標準沒規定friend function需在class外部宣告
11/19 12:23, 9F

11/19 12:24, , 10F
就會造成有的編譯器不需要外部宣就可以使用 有的卻不行
11/19 12:24, 10F

11/19 12:44, , 11F
friend是對一個已有的global或member function作宣告
11/19 12:44, 11F

11/19 19:48, , 12F
了解~感謝各位大神
11/19 19:48, 12F
文章代碼(AID): #1MJGSBcM (C_and_CPP)