Зачем их определять в отдельном заголовочном файле? Они объявляются в месте использования, пусть даже и несколько раз...
1.h
namespace Name1
{
namespace Name2
{
void some_func1 ();
}
}
2.h
namespace Name1
{
namespace Name2
{
void some_func2 ();
}
}
Итого, когда мы подключим 1.h, мы будем видеть только первую функцию. Когда подключим оба файла - обе функции. Проблем это не вызовет.
Рассмотрим такой вариант:
1.h
namespace Name2
{
void some_func1 ();
}
2.h
namespace Name1
{
namespace Name2
{
void some_func2 ();
}
}
В такой ситуации, подключив оба h-файла, Name2 будут различными. Один в Name1, другой - глобальный. Это можно обойти так:
namespace Name1
{
#include "1.h"
}
#include "2.h"
Но это уже изврат.
добавлено спустя 1 минуту: Суть-то тут в том, что namespace не является объектом. Это всего лишь средство разделения области видимости.