tetrapod さん、ありがとうございます。
上記に書いたのが現状のインクルードで、ここの一番上に
#include stdafx.h
を追加し、
#include <windows.h>
をコメントアウトしてやってみても上に書いたようなエラーが出てしまいます。
よろしくお願いします。
#include stdafx.h
#include resource.h
#include Forcelib.h // 自作ヘッダー
~省略~
//#include <windows.h>
~省略~
こんな感じになっていれば、ここ自体は問題ないでしょう
1.プロジェクトの設定で、まず「設定の対象」をすべての構成を選ぶ
2.「+Source Files」の「+」をクリックして開く
3.目的とするファイル「~.cpp」を選ぶ
4.「C/C++」タブを選ぶ
「プリプロセッサの定義」の中に_WINDOWS_(_WINDOWSではない)がありませんか?
これが定義してあれば、これが悪さをしています
なければ、自作ヘッダーの中のどれかが
#define _WINDOWS_をしているのではないかな?
いずれの解決方法も_WINDOWS_を削除することですが、他に問題がおきるかもしれません
まるてぃんすさんが悪いわけではないのだろうが、
_WINDOWS_はユーザプロジェクトで定義しないほうがいいです
また_WINDOWSをミスって、_WINDOWS_となっただけかもしれません
kuさんありがとうございます。
上記の手順通り_WINDOWS_が設定されているか見てみましたが_WINDOWSのみでした。
また他のヘッダーで定義されているかどうか_WINDOWS_をファイルの検索で調べてみまし
たが特にどこにも定義されているところはありませんでした。
あと、このエラーが出るようになってからかどうかわからないのですが、いつの間にか
ワークスペース内のヘッダーソースファイルの中にAFXV_W32.Hというのが追加されて
いるみたいなのですがこれは特に問題ないのでしょうか?
よろしくお願いします。
失礼しました
> 1.プロジェクトの設定で、まず「設定の対象」をすべての構成を選ぶ
これをWin32 Debug、またはWin32 Releaseを選んでやってもらえませんか?
_WINDOWS_
を探してみてください
kuさん、ありがとうございます。
上記のように設定してWINDOWS_を探してみましたが、見つかりませんでした。
後、ちょうどこのソースの部分は、はじめC言語で作成していたモジュール部分をクラ
ス分けし、VCに展開したソースなのですがそういった点で何か問題が発生しているの
でしょうか?詳しく掲示できなくてすみません。
> ワークスペース内のヘッダーソースファイルの中にAFXV_W32.Hというのが追加されて
> いるみたいなのですがこれは特に問題ないのでしょうか?
このファイルを書き換えるような操作をしなければ問題ありません
見る必要もないということなら、ワークスペースのそのファイルを選択状態にして
削除キーで消すことができます(ファイル自体は削除されないので大丈夫)
> いつの間にか
メニューの「プロジェクト」-「プロジェクトへの追加」でファイルを選んで
AFXV_W32.Hを指定しないと、ワークスペースには入りません
> はじめC言語で作成していたモジュール部分をクラ
> ス分けし、VCに展開したソースなのですがそういった点で何か問題が発生しているの
> でしょうか?
これはソースを見ないとわかりません
エラーメッセージは#include <windows.h>をするなということですが実際には
#include <windows.h>で_WINDOWS_が定義されている
#include StdAfx.hをするとafxv_w32.hもインクルードするので
結果的にエラーメッセージが出力される
エラーの判定は#include <windows.h>があるかどうかではなく
_WINDOWS_が定義されているかどうかで判定している
ということです
ヒントになることは、a.cppでは問題なくて、該当.cppで問題となる
2つの違いの部分を中心に調べるのが良さそうだということです
ビルドの順番としては、該当.cppの
1.#include StdAfx.h
2.#include Resource.h
3.~省略~
と処理をするはずですが、2以降の処理より前で問題が起きていると考えられます
どこかで、#pragma error なんたらとすると、当該行で、解釈を止める事ができます。
(=強制コンパイルエラーを引き起こす事ができます。)
#error Abort to compile.
↓
test.cpp(14) : fatal error C1189: #error : Abort to compile.
これで、どこがトリガーになっているか絞り込むのに役立つかもしれません。
kuさん、RAPTさんありがとうございます。
こちらでもいろいろ調査してみましたが、やっとエラーの原因が発見できました。
内容的には
#include Forcelib.h
のインクルードが原因らしく、これをコメントアウトした結果、エラーは出なくなりま
した。ですが、このインクルードをコメントアウトした結果、他にどのような影響を及
ぼすのかまだ把握できていませんので、これから調査してみたいと思います。
また具体的にこのヘッダーファイルでは何をしているのか分かる方がいらっしゃいまし
たら教えて頂ければと思います。
自作ヘッダと既に書かれていますが、だとしたらあなた以外の誰にも内容はわかりません。
Forcelib.h の中で #include windows.h してるとか?
tetrapodさん、ありがとうございます。
そうですね、自作ヘッダーなんで自分しか分からないですよね。
勘違いしていました。すみません。
Forcelib.hのなかでwindows.hがインクルードされているか調べてみましたが、特に無さ
そうでした。
Forcelib.h の中で #include されている hoge.h が windows.h を呼んでいる
Forcelib.h の中で #include されている hoge.h の中で #include されている 以下略
まできっちり調べましたか?
個人的にはそー言うのやってられないので、コマンドラインから -E を使います。
MFC を使う場合 afxv_w32.h 以外が #include <windows.h> を呼んではいけません。
というエラーなので、皆様が既に指摘されているとおり、原因は2つしか考えられなくて
・直接または間接に #include <windows.h> しているファイルが有る
・誤ってか故意にか _WINDOWS_ というプリプロセッサシンボルを定義している
を、全ヘッダに関してチェックせよ、ということです。