namespace X {
void f();
}
void X::f() {
void g();
g();
}
我是否聲明瞭::g
或X::g
?C++中嵌套函數聲明的範圍
鐺3.5將編譯和鏈接,如果我加X::g
一個定義:
namespace X {
void f();
}
void X::f() {
void g();
g();
}
void X::g() { }
GCC 4.9.1拒絕與消息的定義:
error: ‘void X::g()’ should have been declared inside ‘X’
,但如果我定義g
在全球命名空間,海灣合作委員會似乎改變了主意,並抱怨相反:
Undefined symbols for architecture x86_64: "X::g()", referenced from: X::f() in ccABCDEF.o
因爲在f
之內聲明void ::g()
也是非法的,所以似乎不可能在名稱空間函數中具有全局函數的函數範圍前向聲明。我錯過了什麼嗎?這裏的範圍規則究竟是什麼?
g ++(GCC)4.9.1; Apple LLVM 6.0版(clang-600.0.54)(基於LLVM 3.5svn)