名前空間と前方宣言

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぬっち

名前空間と前方宣言

#1

投稿記事 by ぬっち » 15年前

いつもお世話になっております。

今回は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:名前空間と前方宣言

#2

投稿記事 by たかぎ » 15年前

> この違いは何によるものなのでしょうか?

そういう仕様です。

ぬっち

Re:名前空間と前方宣言

#3

投稿記事 by ぬっち » 15年前

仕様なんですか。ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る