Почему это проблема, когда объект, определенный в области файла, имеет то же имя, что и существующее пространство имен? Почему это нормально в области функций (например, внутри основного)?имя объекта, идентичное имени пространства имен: redeclaration
Пример:
#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 {
Эта ситуация довольно легко добиться, если много файлов включены, где были определены много разных пространств имен.
Может кто-нибудь объяснить это? Благодаря! Cheers