分割コンパイル?
■ このスレッドは過去ログ倉庫に格納されています
0001名無しさん@お腹いっぱい。
NGNG#include "a.h"
void a::dd(){
return;
}
-------------------
---file a.h--------
class a{
public:
void dd();
};
-------------------
上のa.cppをコンパイルすると
fatal error C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
と、でます。
予期しないEOFってなんですか?
ちなみにVCで100%書いておりUNIXとかで書いたファイルではありません。
0002名無しさん@お腹いっぱい。
NGNGMFCを使う必要があるならヘッダファイルの先頭に#include "stdafx.h"を書いて
使わないのならプロジェクト-設定のC++タブでカテゴリを「プリコンパイル済みヘッダ」にして
「プリコンパイルヘッダを使用しない」にチェックすると解決するかも
0003名無しさん@お腹いっぱい。
NGNG2さんのとうり
#include "stdafx.h"
で解決しました。
ありがとうございます。
00041
NGNGSDKを利用時の(MFC未使用)WIN32appのウィザードで作成される、
それぞれのファイルの意味はどんなかんじでしょうか?
ちなみにVC6を使用です。
私のかってな解釈では
stdafx.h:アプリケーションで使うヘッダーをここに書く。
stdafx.cpp:stdafx.hの内容をコンパイルする?(従って触るな)
といった感じです。
アプリ作成時には
myclass.hに独自クラスを宣言し、
myclass.cppにメンバ関数の中身を記述
stdafx.hのTODO以下にmyclass.hをインクルード
という順でいいのでしょうか?
この場合、プリコンパイル済みヘッダーを使用(stdafx.h)ではEOF検出エラー
プリコンパイル済みヘッダーを自動的に使用(stdafx.h)ではうまくコンパイルが通ります。
プリコンパイルってなんでしょうか?
また、"自動的に"っていう意味がわかりません。
今までこの辺りがよくわからないのとたいして大きなアプリではなかったため、
すべて最初にできるcppに記述していました。
これからステップアップするためにご教授ください。
0005名無しさん@お腹いっぱい。
NGNG00062>1=4
NGNG00072>1=4
NGNGしかし、5さんも言ってるようにMFC使わないのなら
「Win32 Application」か「Win32 Console Application」で
プロジェクト作ったほうがいいと思う。
00081
NGNGまぎらわしくて、ごめんなさい。
とりあえず、プリコンパイル済みヘッダーを使用しないで
コンパイルは通っているので、プリコンパイルの事は忘れます。
新しい疑問がでてきましたので再度、質問します。
クラスを作りそれ用の演算子オーバーロードを作っており、
それ自体は問題ないのですが、
フレンド関数で演算子オーバーロードをする時に
同じファイル中のクラスは重複しないのに
そのフレンド関数の演算子オーバーロードだけは
複数回定義されているようです。
#pragma once
や
#if !defined(xxxxx)
などは行っています。
なにか解決法とかありますか?
クラス内の演算子と違ってグローバルな演算子になると思うので、
その辺りがポイントだとは思いますが、
うーんむずいです。
00091
NGNG別ファイルに書き出すことにより、重複を避ける事ができました。
だけど、クラス別に1つのファイルにまとめたいなぁ。
00105
NGNGclass foo
{
   :
   :
friend void bar(foo&);
};
void bar(foo&);
   :
foo.cpp
   :
   :
void bar(foo& f)
{
   :
}
とかやってみればいいんじゃないのかな。
いや、どうやったのかよくわかんないんだけど。
00112
NGNGたぶん1はクラスの内容をSTLみたいにすべてヘッダ内で完結したいんだろうなぁ・・・
>>8
どうしてもやりたいならクラスの外に記述する必要があるフレンド関数やスタティックメンバなどを
#if defined(HOGEHOGE)で囲んでどこかのソースファイルにひとつだけHOGEHOGE(この名前に意味はない。念のため)を
#defineすることくらいしか思いつかない。
■ このスレッドは過去ログ倉庫に格納されています