ソースファイルをうまくまとめるには?

解決


ねね  2008-03-26 23:49:57  No: 67904

ソースファイルのおき場所を分割したいのですが
コンパイル時にincludeファイルが開けませんとでます。

例をあげるとAファイルにa.h、Bファイルにb.hをいれて
A,Bファイルを1つのファイルにまとめています。
それでa.hのソースの中で
#include "b.h"と書くとソースが開けなくなります。
おそらく"B\\b.h"のように書くとインクルードできるのでしょうが
他のやり方はないでしょうか?
よろしくおねがいします。


επιστημη  URL  2008-03-26 23:58:01  No: 67905

コンパイル・オプション -I で"探しにいくディレクトリ"を指定できます。


アキラ  URL  2008-03-27 00:09:32  No: 67906

プロジェクトの設定でインクルードのパスを通しましょう。
「追加のインクルードディレクトリ」(-Iオプション)というのがあります。


ねね  2008-03-27 00:34:53  No: 67907

本当にもうしわけないのですが-Iオプションってなんですか?
私はMicrosoft Visual C++ 2005 Express Editionを使用しているのですが
それでいうとどれでしょうか?


アキラ  URL  2008-03-27 00:48:33  No: 67908

-Iオプションは、簡単に言えば

#include "B/b.h"

#include <b.h>
と書けるように、ディレクトリBへのパスを通してあげるオプションです

> Microsoft Visual C++ 2005 Express Edition
では、「プロジェクト」→「"プロジェクト名"のプロパティ(Alt + F7)」→「構成プロパティ」→「C/C++」→「追加のインクルードディレクトリ」でディレクトリBのパスを入力してください


ねね  2008-03-27 00:58:39  No: 67909

早いご返事ありがとうございます。
途中パニくりましたがなんとかできました!!
ほんとうにありがとうございます。


ねね  2008-03-27 01:14:17  No: 67910

もうしわけないです。
ディレクトリを追加することはできたのですが
追加をするとstrlen、memcpyなどの
関数が見つからないと出てしまいました。
なんででしょうか?


赤猿  2008-03-27 01:24:03  No: 67911

a.h や b.h 内で他に
#include "..."
としている箇所はないですか?


ねね  2008-03-27 01:31:35  No: 67912

あることはあるんですが・・・なんといったらいいか・・
ディレクトリを追加せずソースを1つのフォルダにまとめているとエラーが起こらないのです。
で、そのままディレクトリを追加するとエラーが起こるんです。
strlenやmemcpyはまったく関係ないように思えるのですが・・・


赤猿  2008-03-27 01:38:45  No: 67913

では、
> strlenやmemcpy
上記関数はどこでインクルードされていますか?


ねね  2008-03-27 01:43:33  No: 67914

プリコンパイル済みヘッダです。


赤猿  2008-03-27 02:07:38  No: 67915

> プリコンパイル済みヘッダです。
同名の別ファイルをインクルードしていませんか?


アキラ  URL  2008-03-27 02:08:36  No: 67916

そのプリコンパイル済みヘッダをエラーがでているファイルで
インクルードしてますか?
どこにあるプリコンパイル済みヘッダをどこでどういう風にインクルードしてますか?
(プロジェクトの構成がいまいちわかりません)


アキラ  URL  2008-03-27 02:14:16  No: 67917

※ stdafx.hがプリコンパイル済みヘッダーだと仮定して

#include "stdafx.h" // そのディレクトリのstdafx.h
#include "../stdafx.h" // 相対パスでのstdafx.h
#include <stdafx.h> // パスが通ったディレクトリのstdafx.h
↑のどの形式を使ってるファイルでエラーが出てますか?


ねね  2008-03-27 02:44:57  No: 67918

>赤猿さん
strlenは<string.h>で定義してありますが自作のもので
"String.h"は作ってあります。
というよりエラーはその"String.h"内部でのstrlenの使用のところでした。
もしかして同名なので混乱してるのかな?
>アキラさん
前の質問はちょっと答えにくいですが
stdafx.hでString.hをインクルードしていて
String.h内でstrlenを使用しています。
なのでString.h内ではstdafx.hはインクルードしておらず
String.cppで"stdafx.h"としてインクルードしています(これは関係ないかな?)


アキラ  URL  2008-03-27 03:09:48  No: 67919

"String.h"のファイル名を変えて試してみましょう
それでも同じエラーは出ますか?


ねね  2008-03-27 03:22:49  No: 67920

エラーが出なくなりました。
けっこうやっかいですね・・
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加