当文件范围中定义的对象与现有命名空间具有相同名称时,为什么会出现问题?为什么这在函数范围内可以(例如在 main 内)?
例子:
#include <iostream>
namespace foo {
class Foo {};
}
namespace bar {
class Bar {};
}
// foo::Foo foo; // <-- This will give error
int main () {
bar::Bar bar; // <-- This is ok
std::cout << "Program ran successfully" << std::endl;
return 0;
}
我得到的错误是
ns_main.cpp:11:10: error: ‘foo::Foo foo’ redeclared as different kind of symbol
foo::Foo foo;
^
ns_main.cpp:3:15: error: previous declaration of ‘namespace foo { }’
namespace foo {
如果在定义了许多不同名称空间的地方包含大量文件,则这种情况很容易实现。
有人可以解释一下吗?谢谢!干杯