- ベストアンサー
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を代入
- みんなの回答 (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が未定のままになります
その他の回答 (1)
- koko_u_
- ベストアンサー率18% (459/2509)
Global.h で Lib.h をインクルードしてるからでは?
お礼
これはそうせざる負えない仕様なので仕方ないのです・・
お礼
なるほど! 凄く分かりやすかったです。おかげさまで疑問点が解決できました。 ありがとうございました。 【追記】 後から見る人のためにですが // main.h ---------------------------------------------------- は // main.cpp--------------------------------------------------- の間違いです。。