作者siuol (louis)
看板C_and_CPP
標題[問題] friend function 未宣告
時間Thu Nov 19 07:17:29 2015
開發平台(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://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1447888651.A.996.html
1F:推 lovejomi: main中 有宣告 foo嗎? 11/19 09:14
2F:→ siuol: main中要宣告??@@ 11/19 09:30
3F:→ roggerbass: 在 A.h 最後加上 A foo(int a, int b); 11/19 10:26
4F:→ roggerbass: gcc 4.5.2 11/19 10:28
5F:→ roggerbass: A foo(int a, int b, const A& temp) 也過不了 11/19 10:29
6F:→ roggerbass: 事實上跟friend funtion declartion沒關係 11/19 11:04
7F:→ siuol: 所以在class裡面那行不算已經宣告了? 11/19 11:40
8F:→ siuol: 是我對friend有誤解就是了orz... 11/19 11:41
9F:→ Caesar08: 應該說 標準沒規定friend function需在class外部宣告 11/19 12:23
10F:→ Caesar08: 就會造成有的編譯器不需要外部宣就可以使用 有的卻不行 11/19 12:24
11F:→ tsoahans: friend是對一個已有的global或member function作宣告 11/19 12:44
12F:→ siuol: 了解~感謝各位大神 11/19 19:48