ページ 11

名前空間と前方宣言

Posted: 2010年10月01日(金) 10:09
by ぬっち
いつもお世話になっております。

今回はC++で名前空間と前方宣言について疑問があるので質問させていただきます。
OSは、Windows 7 Home Premium 64bit
コンパイラは、Visual Studio 2010 Express
です。

例えば、hoge.cpp、hoge.h、piyo.hというファイルがあったとして以下のようなコードになっているとします。
//hoge.h
namespace A
{
    namespace B
    {
        class Hoge
        {
            //メンバ関数など
        };
    }
}

//hoge.cpp
namespace A
{
    namespace B
    {
        //Hoge.hで宣言したclass Hogeのの実装
    }
}

//piyo.h
class A::B::Hoge;    //前方宣言

//A::B::Hogeを使うクラスの宣言
こうすると、コンパイルエラーとなってしまいます。
エラーの内容は、「HogeはAのメンバではありません」などという内容です。
それに対して、piyo.hを
//piyo.h
namespace A
{
    namespace B
    {
        class Hoge;
    }
}

//A::B::Hogeを使うクラスの宣言
とするとコンパイルエラーとならず、正常に動作します。
初歩的な筆問で申し訳ないのですが、この違いは何によるものなのでしょうか?
教えていただければ助かります。
よろしくお願いします。

Re:名前空間と前方宣言

Posted: 2010年10月01日(金) 11:36
by たかぎ
> この違いは何によるものなのでしょうか?

そういう仕様です。

Re:名前空間と前方宣言

Posted: 2010年10月01日(金) 12:36
by ぬっち
仕様なんですか。ありがとうございます。