2016-12-18 11 views
1

これが可能かどうかはわかりませんが、ネストされたネームスペースの異なるレベルに同じ名前のクラスが2つあります。 class深いクラスの友人。例:File1.hでネストされたネームスペースの異なるレベルの同じ名前のC++フレンドクラス

:File2.hで

namespace A 
{ 
    class Foo 
    { 
    //stuff 
    }; 
} 

namespace A 
{ 
    namespace B 
    { 
    class Foo 
    { 
     friend class A::Foo; //Visual Studio says "Error: 'Foo' is not a member of 'A'" 
    }; 
    } 
} 

これは可能ですか?もしそうなら、正しい構文は何ですか?

+2

あなたが '' File2.h'でFile1.h'が含まれていましたか? – StoryTeller

答えて

0

このコードは、1つのファイルに置かれたときにokfをコンパイルします(ただし、クラスの後に;が必要です)。IdeOne example

問題は、質問テキストに含まれていないコードにあります。おそらく#include "File1.h"File2.hで忘れ去られました。

0

あなたが他の人に大きなヘッダファイルを含めないようにしたい場合は、少なくとも前方にそれらを使用する前に、あなたのクラスを宣言する必要があります:

namespace A 
{ 
    class Foo; 

    namespace B 
    { 
    class Foo 
    { 
     friend class A::Foo; 
    } 
    } 
} 
関連する問題