ソースファイルのおき場所を分割したいのですが
コンパイル時にincludeファイルが開けませんとでます。
例をあげるとAファイルにa.h、Bファイルにb.hをいれて
A,Bファイルを1つのファイルにまとめています。
それでa.hのソースの中で
#include "b.h"と書くとソースが開けなくなります。
おそらく"B\\b.h"のように書くとインクルードできるのでしょうが
他のやり方はないでしょうか?
よろしくおねがいします。
コンパイル・オプション -I で"探しにいくディレクトリ"を指定できます。
プロジェクトの設定でインクルードのパスを通しましょう。
「追加のインクルードディレクトリ」(-Iオプション)というのがあります。
本当にもうしわけないのですが-Iオプションってなんですか?
私はMicrosoft Visual C++ 2005 Express Editionを使用しているのですが
それでいうとどれでしょうか?
-Iオプションは、簡単に言えば
#include "B/b.h"
を
#include <b.h>
と書けるように、ディレクトリBへのパスを通してあげるオプションです
> Microsoft Visual C++ 2005 Express Edition
では、「プロジェクト」→「"プロジェクト名"のプロパティ(Alt + F7)」→「構成プロパティ」→「C/C++」→「追加のインクルードディレクトリ」でディレクトリBのパスを入力してください
早いご返事ありがとうございます。
途中パニくりましたがなんとかできました!!
ほんとうにありがとうございます。
もうしわけないです。
ディレクトリを追加することはできたのですが
追加をするとstrlen、memcpyなどの
関数が見つからないと出てしまいました。
なんででしょうか?
a.h や b.h 内で他に
#include "..."
としている箇所はないですか?
あることはあるんですが・・・なんといったらいいか・・
ディレクトリを追加せずソースを1つのフォルダにまとめているとエラーが起こらないのです。
で、そのままディレクトリを追加するとエラーが起こるんです。
strlenやmemcpyはまったく関係ないように思えるのですが・・・
では、
> strlenやmemcpy
上記関数はどこでインクルードされていますか?
プリコンパイル済みヘッダです。
> プリコンパイル済みヘッダです。
同名の別ファイルをインクルードしていませんか?
そのプリコンパイル済みヘッダをエラーがでているファイルで
インクルードしてますか?
どこにあるプリコンパイル済みヘッダをどこでどういう風にインクルードしてますか?
(プロジェクトの構成がいまいちわかりません)
※ stdafx.hがプリコンパイル済みヘッダーだと仮定して
#include "stdafx.h" // そのディレクトリのstdafx.h
#include "../stdafx.h" // 相対パスでのstdafx.h
#include <stdafx.h> // パスが通ったディレクトリのstdafx.h
↑のどの形式を使ってるファイルでエラーが出てますか?
>赤猿さん
strlenは<string.h>で定義してありますが自作のもので
"String.h"は作ってあります。
というよりエラーはその"String.h"内部でのstrlenの使用のところでした。
もしかして同名なので混乱してるのかな?
>アキラさん
前の質問はちょっと答えにくいですが
stdafx.hでString.hをインクルードしていて
String.h内でstrlenを使用しています。
なのでString.h内ではstdafx.hはインクルードしておらず
String.cppで"stdafx.h"としてインクルードしています(これは関係ないかな?)
"String.h"のファイル名を変えて試してみましょう
それでも同じエラーは出ますか?
エラーが出なくなりました。
けっこうやっかいですね・・
ありがとうございました。
ツイート | ![]() |