作者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/cn.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