我有下面的代碼:友元函數,GCC不能編譯
文件:foo.h中
class Foo {
friend void Bar();
};
文件:Foo.cpp中
void Bar() {};
文件Test.cpp
#include "Foo.h"
int main(void) {
Bar();
return 0;
}
VS2008 c ompiles沒有任何錯誤或警告。 G ++ 4.3.4報告:
test.cpp: In function ‘int main()’:
test.cpp:8: error: ‘Bar’ was not declared in this scope
爲什麼?
你能證明,即與C++標準的參考?我找不到那個。 – liori 2009-11-22 20:08:34
什麼是struct X {friend operator <<(std :: ostream&os,const X&x){os <<「foo」;}};'?在'friend'聲明中爲類模板定義一個流操作符是一個很常見的習慣用法,並且確實足夠調用操作符。 – sbi 2009-11-22 20:30:05
sbi,在類內定義朋友函數(不僅聲明)時的情況由11.4.5覆蓋(「函數可以在類的朋友聲明中定義當且僅當該類是非本地類時,函數名稱是不合格的,函數具有名稱空間範圍「 - 您的示例滿足這些要求)。我*猜測*該標準確實允許類內部的朋友函數的聲明(「原型」)。這是g ++產生的錯誤讓我困擾。 – liori 2009-11-22 20:35:01