• ベストアンサー

namespace名前空間をヘッダファイル間で共用したい

環境: WinXP, VisualStudio2005 目的: 現在WinAPI系のライブラリを作っているのですが、以下のような 状況で、namespaceを.cppファイルだけでなく.hファイルでも共用 出来るようにすることは可能でしょうか? ちなみに以下のコードでは lib.h(5) : error C2653: 'G' : 識別子がクラス名でも名前空間名でもありません。 lib.h(5) : error C2065: 'A' : 定義されていない識別子です。 というエラーが出てきます。 // main.h ---------------------------------------------------- #include "Global.h" int main() { } // Global.h --------------------------------------------------- #pragma once #include "Lib.h" namespace G { const int A = 100; } // Lib.h ------------------------------------------------------- #pragma once #include "Global.h" int b = G::A; //名前空間Gの中にあるAを代入

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

Main側でインクリュードするのを『Lib.h』を先にするか、namespace Gの定義の後で lib.hをインクリュードしましょう global.hからインクリュードすると global.h内の 『#include "Lib.h"』をプリプロセスする際には namesapce Gは未定ですよね Lib.hでGlobal.hを読み込もうとしていますが #pragma onceがglobal.hに記述されているので読み込みません したがって global.hからインクリュードされたLib.hの中ではnamesapce Gが未定のままになります

noname#88356
質問者

お礼

なるほど! 凄く分かりやすかったです。おかげさまで疑問点が解決できました。 ありがとうございました。 【追記】 後から見る人のためにですが // main.h ---------------------------------------------------- は // main.cpp--------------------------------------------------- の間違いです。。

その他の回答 (1)

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

Global.h で Lib.h をインクルードしてるからでは?

noname#88356
質問者

お礼

これはそうせざる負えない仕様なので仕方ないのです・・

関連するQ&A