namespace

C++におけるnamespaceで気がついたことがあるので、メモします。


考えてみれば当たり前なんだけど、何気に気がつかなくて、悩んじゃった問題。
namespace NAMEA
{
class CLASSA
{
};
CLASSA* CreateClass();
};
というヘッダがあって、NAMEAという名前空間に、CLASSA というクラスと、CreateClassという関数を置いたとします。
cpp側で、
using namespace NAMEA;
CLASSA* CreateClass(){ ……..}
ってやっちゃうと、CreateClass関数の実装は、、、、、そうです。グローバルに置かれます。
ということで、外部で、
NAMEA::CreateClass()を参照すると、実装がありませんってことでリンクエラーになります。
実装側では、たとえ、using namespace をやっていても、ちゃんと
CLASSA* NAMEA::CreateClass(){…….}
ってやりましょう。
こんなんで、悩んでしまったことがちょっと恥ずかしい。。。

コメントを残す