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)