2011-11-08 21 views
0

ヘッダファイルに名前空間エイリアス(名前空間A = B :: C)を入れたいので、ソースファイルで使うことができますが、コンパイラは "名前空間名ではない"と言っています。何かご意見は?ヘッダーファイルに名前空間エイリアスを宣言してから、ソースファイルで使用するにはどうすればよいですか?

これ...私が何をしようとしているのは非常に単純化されたaxampleある

ヘッダファイル:

namespace A{ 
namespace B{ 
int getInt(); 
} 
} 

namespace AB = A::B; 

source file: 

#include "header_file.h" 
#include <iostream> 

int AB::getInt(){ // Error "AB is not a namespace name" 
return 123; 
} 
+1

は、私はあなたのコードにエラーがあると思います。 (ヒント:ポストコード) – avakar

+0

[こちら](http://www.ideone.com/4IqxN)が役立つかもしれません。 –

+0

その方法が大きすぎます。ヘッダー:名前空間a {int a};名前空間b = a; ソース:int a = b :: a; //エラー? – user965369

答えて

2

あなたはヘッダファイルに名前空間を宣言したり、ファイルをインクルードする必要がありコメントはこれを行うと言うよう:

namespace B { namespace C { } } 
namespace A = B::C; 
+1

またはエイリアス定義 –

+0

の直前に空の名前空間を宣言するか、または含めるのではなく名前空間を再宣言するだけです。 – justin

+0

名前空間は複数のファイルにわたり、私は持っています。 – user965369

1

をエイリアスを作成する時点では、コンパイラは、すでにエイリアスの名前空間を見ている必要があります。

したがって、あなたは、名前空間を言っ含むファイルを#includeしなければならないか、この操作を行う必要があります。

// "Forward Declaring" the namespace 
namespace B { namespace C { } } 

namespace A = B::C; 
+0

私はこの問題をすべて解決しました。エイリアスのスコープがソースファイルに持ち込まれていないということです。 – user965369

+0

あなたは.cppファイルでプリプロセッサを実行しようとしましたが、何か変なことが起こっているのを見ましたか?おそらく、名前空間にネストされた '#include 'を持っていますか? –

+0

ええ、それはすべて完了しました。私は名前空間エイリアスファイルスコープに関する情報をどこで見つけることができるのか知っていますか?ありがとう – user965369

関連する問題