現在Win32でプログラミングを書いていて, Windows.hをインクルードしようとしていたところ, 大量のエラーメッセージが表示されました. どうやら#define疑似命令が反応していない模様で, 自分で定数を作ろうとしても, 作ることができません. 例えば#define AAA 5と入力してもAAAが紫っぽい色になりません.
発生している問題・エラーメッセージ
いじってもいない大量のヘッダーファイルから#defineが反応していないです. ほとんどのエラーは
identifier "__In__" is undefined
のようなエラーです.
何度か#defineが反応することもあり, また実行には影響がないかもしれませんが, エラーメッセージが3779もあるため煩わしいです. また#defineが使えないと困るので.
該当のソースコード
C++
1#define AIJHOIFGHD 5 //反応しないです 2//初めの行の一番頭の文字の下に赤の波線が入ります. 3//どの命令を入力しても変化はありません. 4 5#include<windows.h> 6#include<windowsx.h>
試したこと
まずヘッダファイルが壊れているのかなと考え, ファイルを消してインストーラの復元ツールを試しましたが変わりませんでした. エラーの発生源は#defineとわかって以降方法が思いつきません.
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019(16.6.2)
プリコンパイル済みヘッダを使用する設定にした状態で、#include "pch.h"よりも前に#defineや#includeを書いているのでは?
このソースコードファイルの文字コード(UTF-8、UTF-16、Shift-JISなど)は想定通りのものでしょうか。もしかしたら、コンパイラがその辺りを正しく解釈できていないのかもと思いまして。
返信ありがとうございます. いつも空のプロジェクトでプロジェクトを作っているのです関係ないはずです.
文字コードは関係なさそうですね、失礼しました。
(SHOMIさんのコメントされているpchの方が原因かも)
プログラムには半角文字しか利用していないので, 問題ないかと考えていたのですが...(コメントも除外して実行してみたりもしています. )
VSの文字コード設定を調べてきます.
ありがとうございます.
空のプロジェクトで作成しても関係あるのでしょうか. プリコンパイル済みヘッダ付きのプロジェクトを作ったことがないのでよくわかっていません.
>ほとんどのエラーはidentifier "__In__" is undefinedのようなエラーです.
省略していないエラーメッセージを書いてみてください。
スクリーンショットを質問に貼るでもよろしいですか?
3779ものエラーを書くのは現実的でないので...
新しくプロジェクトを作り直しても変化はありませんか?
やってみます.
他の新しいプロジェクトでは問題ありませんでした.
しかし過去にかいたものは同様のエラーになっています...コピーペーストでは問題ないようですが...
#include<windows.h>の前に文法的におかしなもの(#defineの#を抜いたり、aを一文字書く等)を書くと似たような状態になりますね。
おかしな文字(目視ではわからない変な文字コードや全角スペース等)が紛れ込んでいませんか?
一旦#include<windows.h>より前の行をすべて削除するとどうなりますか?
問題のなかった新しいプロジェクトでのソースコードは書き直しですか?
問題の起きていたソースファイルをプロジェクトに追加すると、エラーになりますか?
エラー一覧の方のE~はIntelliSenseのエラーです。Buildのみにすると何が出ていますか?(もしくはOutputタブのビルドのログ)
#include<windows.h>を一行目にいきなりおいても全く同じと思われるエラーのままです.
問題の起きていたソースファイルをプロジェクトに追加すると、エラーになりますか?->なりませんでした. 方法は.cppをExisting itemとしてコピーせずに結び付けたので, ということは.cppには原因はなさそうです.
Buildのみにすると何が出ていますか?->ビルド以前に打ち込むだけでエラーが出るのですが, どうなんでしょうか. 一応やってみるも変化なしです.
ビルドは通るんですか?
IntelliSenseのデータがおかしくなっているだけかも?
この下に
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
return 0;
}
と入力するとビルドはSucceededを出します.
回答1件
あなたの回答
tips
プレビュー
