- ベストアンサー
Visual C++ の大域変数
VisualC++.NET を使ってソフトウェアを作っています(MFCを用いています)。 独自のクラスを新規に作成し、そのクラスの中身を格納したヘッダファイル、CPPファイルは自分で#includeで挿入する必要はあるのでしょうか? また、グローバル変数としてクラスを定義し、それを別のファイルから読み込もうとしても、「定義されていない識別子です。」とエラーメッセージが出てしまいます。 おそらくファイルの順番の問題だと思いますが、これらを解決する手段はありますか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>#includeで挿入する必要はあるのでしょうか? 必要です。それはclassでなくても 構造体だろうがtypedefだろうが定義は必要ですし stdio.hをincludeしないとprintfが使えないのと同じ事です。 >定義されていない識別子です。 それは CMyClass g_myclass; と宣言して他のファイルからg_myclassを読みとろうとしているのでは? g_myclassを使用するファイルで extern CMyClass g_myclass; としないとシンボリック(識別子)がどれかコンパイラは判断できません。 >ファイルの順番の問題 ヘッダファイルを読みとる順番で、エラーが発生する作りは問題です。 基本的な事ですがヘッダファイルは2重定義しないように #ifdef XXX #define XXX ~ #endifでくくります。
その他の回答 (1)
- yosi_yosi
- ベストアンサー率35% (165/468)
通常その作成したクラスを使う場合には、そのクラスの宣言が必要です。ですので、既存のクラスからその新しいクラスを使用する場合にはヘッダファイルをincludeする必要があります。CPPファイルについては、プロジェクトのソースファイルに追加されており、ビルドの対象となっていればリンク時に自動的にincludeに相当する処理を行いますので不要です。 「定義されていない識別子です。」のエラーは例えば、 A.CPP で「クラス1」をグローバル宣言し B.CPP でその「クラス1」を使用する場合には、B.CPP でexport を使用して外部で定義されていることを明示する必要があります。
お礼
詳しくありがとうございます。 externですか~。すっかり忘れていました・・・。 よくよく調べてみると、プログラムがうまく動かないのはそれ以外にも原因がありそうでした。 もう一度落ち着いてやり直してみる必要がありそうです。 ともかく、ありがとうございました。