ヘッダーファイルをインクルードする順番に決まりがあるのでしょうか – プログラミング – Home

ヘッダーファイルをインクルードする順番...
 
通知
すべてクリア

[解決済] ヘッダーファイルをインクルードする順番に決まりがあるのでしょうか


はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

 今、スプリッタ-ウィンドウで5つにわけ、それぞれ別々のViewを表示させるようなプログラ
ムを作っています。
 そのうちの2つのウィンドウでCHistViewクラスとCGraphViewクラスという自作したクラスを
使っているのですが、なぜかビルドすると片方のクラスが認識されずにエラーが出てしまいま
す。
 CMainFrameクラスのOnCreateClient()関数の中で

m_wndSplitter3.CreateView(2,0,RUNTIME_CLASS(CHistView),CSize(100,360),pContext);

というように使っているのですが、

error C2653: 'CHistView' : 識別子がクラス名でも名前空間名でもありません。

というようにエラーが出てしまいます。MainFrm.cppの初めで

#include GraphView1.h
#include HistView1.h

とどちらもインクルードしているのですが、なぜかうまくいきません。ところが不思議なことに

#include HistView1.h
#include GraphView1.h

とインクルードする順番を変えると今度は、

error C2653: 'CGraphView' : 識別子がクラス名でも名前空間名でもありません。

とCGraphViewクラスの方が認識されなくなってしまいます。以前にも、クラスが認識されない
ときにインクルードする順番を前の方に持ってくるとうまくいく場合があったのですが、このよ
うになにかインクルードする順番にルールとかあるのでしょうか。

みなさん、お忙しいとは思いますが、なにか気づいた点、同じような症状などに合われた点など
があれば何でもいいです、教えてください。よろしくお願いします。

環境
 Win 98SE
VC++6.0
 です。


引用未解決
トピックタグ
重
 重
(@重)
ゲスト
結合: 25年前
投稿: 84
 

特にこの場合では順番は関係ないと思います。
ヘッダーファイルに問題があるのではないでしょうか?


返信引用
TAD
 TAD
(@TAD)
ゲスト
結合: 23年前
投稿: 54
 

ヘッダーファイルの最初の #if !defined と、次の行の #define の中身が、二つのファイル
で同じになっていませんか?
これは、多重インクルードを防ぐためのものなので、一意な記号定数でなければなりません。
確認してみてください。


返信引用
はまち
 はまち
(@はまち)
ゲスト
結合: 24年前
投稿: 146
Topic starter  

お返事が送れてすみませんでした。重さん、TADさん、お返事ありがとうございました。重さん
とTADさんの言っていた通りでし
た。HistView1.h、GraphView1.hどちらも、別の自作クラスのCParameterListをポインタとし
てメンバ変数で使いたかったので、

#if !defined(_CPARAMETERLIST_)
#define _CPARAMETERLIST_

class CParameterList;

としていたのですが、ここをそれぞれ名前を変えて、

//HistView1.h
#if !defined(_CPARAMETERLIST1_)
#define _CPARAMETERLIST1_

//GraphView1.h
#if !defined(_CPARAMETERLIST2_)
#define _CPARAMETERLIST2_

としたらうまくいきました。やっぱり同じ物をインクルードしようとしていたんですね。

いつも月並みなお返事になってしまうのですが、今回も助かりました。ありがとうございまし
た。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました