При определении функций-членов класса в исходном файле мы можем использовать using namespace ns1::ns2::...::nsx
, чтобы избежать необходимости полностью определять имена функций.
Например,
// Header file - foo.hpp
namespace ns1::ns2 {
class FooClass {
void fooMethod();
}
}
// Source file - foo.cpp
#include "foo.hpp"
using namespace ns1::ns2;
void FooClass::fooMethod() {
// do something
}
Однако недавно я попал впутаница при попытке определить глобальную функцию.
См. Следующий пример.
// Header file - bar.hpp
namespace ns1::ns2{
void barFunction(); // <-- compile error: undefined reference
}
// Source file - bar.cpp
#include "bar.hpp"
using namespace ns1::ns2;
void barFunction(){
// do something
}
Я ожидал, что компилятор выведет определение в bar.cpp
как определение ns1::ns2::barFunction
, определенное в bar.hpp
.Но это не так.(Все работает нормально, если я использую полностью определенное имя в определении).
Это ожидаемое поведение или я что-то не так делаю?