.NET2003環境で、ソースファイルにwinsock2.hをインクルードしたところ
その先のヘッダファイルwinreg.hでインクルードしているreason.hが
PlatformSDKのヘッダファイルではなく、自分が作成したヘッダファイルを
参照してしまったのですが、PlatformSDKのヘッダを優先して参照するよう
にするにはどのようにしたら良いのでしょうか?
自分が作成したヘッダファイルをローカルフォルダに置く。
winreg.hでは
#include <reason.h>
と"<"、">"でファイル名を括っているので、環境変数INCLUDEで設定された
フォルダを優先するハズです。
/* 環境変数が設定されていないってオチ? */
ヘッダファイルはローカルフォルダに置いています。
>と"<"、">"でファイル名を括っているので、環境変数INCLUDEで設定された
>フォルダを優先するハズです。
環境変数は、
Microsoft Visual Studio .NET 2003\SDK\v1.1\include
にパスが切られています。
正しいかどうかはわかりませんが、試しに
Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include
に設定してみましたが、状況は変わりませんでした。
一度中間ファイルを全て消して、リビルドしてみてはどうですか。
ごく希にそういう現象が起こったような気がします。
はい、リビルドも試してみましたが、変わりませんでした。
VS2003のツール→オプションの、プロジェクト以下にある「VC++ディレクト
リ」の設定で、自作ヘッダのあるパスを登録していませんか?
登録していた場合、確か上から順番に参照していくはずなので、優先順位を変
更してあげればよいかと思います。
ただ、個人的には自作のヘッダは、元々あるものと重複しないように作った方
がよいと思いますけど・・・
的外れな回答でしたらごめんなさい。
ディレクトリ設定のインクルードのパスは以下のように設定されています。
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include\prerelease
$(FrameworkSDKDir)include
$(VCInstallDir)PlatformSDK\include
これらのパスには自作したヘッダは入っていません。
プロジェクトのC/C++以下の追加のインクルードディレクトリのほうにパスを追加しています。
>ただ、個人的には自作のヘッダは、元々あるものと重複しないように作った方
>がよいと思いますけど・・・
>
>的外れな回答でしたらごめんなさい。
いえ、全くそんなことはないですよ。
私も全く同じことを思ってますので。
正直、ファイル名変えたいです・・・
ただ仕事ものですので、私の一存で決定できなくて。
> ただ仕事ものですので、私の一存で決定できなくて。
だったらなおのこと、しかるべき決定権を持つ方にファイル名の変更を
"胸を張って"進言するのがスジかと。
もしくは適当なディレクトリを切って
#include <project/reason.h>
とするか。
>だったらなおのこと、しかるべき決定権を持つ方にファイル名の変更を
>"胸を張って"進言するのがスジかと。
その通りですね。
変更の承諾を頂きましたので、なんとか解決です。
ありがとうございました。
解決チェックし忘れました。
> 変更の承諾を頂きましたので、なんとか解決です。
対症療法で対策しただけで、解決はしていないような気が...
問題がなくなったという点では、解決ですね。
/* 仕事の場合は対症療法に頼らざるをえない場合が多いのも事実だし。*/
出来れば、原因を究明していただけたらよかったのですが。
> 対症療法で対策しただけで、解決はしていないような気が...
そっかな? 同名のヘッダが複数存在するのはなにかとトラブルの元なんだから、
むしろ抜本的な対策を講じたんじゃないかしら。
> そっかな? 同名のヘッダが複数存在するのはなにかとトラブルの元なんだから、
それはそうなんだけど、動作が仕様と合っていないというのはいやです。
また、ヘッダファイルを作るときに名前の衝突を避ける為にライブラリの
ヘッダ名を全て把握しなければならないのもいや。もちろん自分の使って
いるヘッダは把握していますが、そのヘッダでインクルードしている末端
のヘッダまで把握しなさい、といわれると、ゴメンナサイといいたくなる。
「考えが甘い」と言われれば甘んじて受けます。
> また、ヘッダファイルを作るときに名前の衝突を避ける為にライブラリの
> ヘッダ名を全て把握しなければならないのもいや。
それはごもっとも。
だから通常は直に
#include <reason.h> せずに、ひとつディレクトリ切って
#include <somewhere/reason.h> するです。
> だから通常は直に
> #include <reason.h> せずに、ひとつディレクトリ切って
> #include <somewhere/reason.h> するです。
なるほど、了解いたしました。
でも、これはやっていないなあ。今後コーディング規約にいれるかな。
ところで、なぜ
#include "somewhere/reason.h"
ではないんですか?
> ところで、なぜ
> #include "somewhere/reason.h"
> ではないんですか?
どっちでもかまわんでしょ。
あらかじめ定めたルールに従えば。
> どっちでもかまわんでしょ。
> あらかじめ定めたルールに従えば。
そうですか。
何か特別の意味があるのかと思いました。
ツイート | ![]() |