1

特定されていないソフトウェアをコンパイルしようとしていますが、stdio.h. エラーは、ほとんどの場合、 などの宣言されていない識別子_In_です。IntelliSense は、それらの定義を適切に検出します。この原因をどのような一般的な方向で探す必要がありますか?

追加: たとえば、1 つの cpp ファイルstdio.hには最初に含まれるファイルがあります。その前に確認できる定義はありません。プリコンパイル済みヘッダーは使用されません。私のインストールの他のものは問題なくコンパイルされます。

4

7 に答える 7

2

VSはプリコンパイル済みヘッダーを使用するのが好きなので、どの仮定にも違反していないことを確認することをお勧めします。問題の原因の1つは、を含む行の前にヘッダーに名前を付けることstdafx.hです。

プリコンパイル済みヘッダーの問題がない場合でも、ストックヘッダーの定義とうまく相互作用しないものを誤って定義している可能性があります。stdio.hの内部を見ると、同じファイルがいくつかの異なるプラットフォームに配布されているため、興味深い条件付きコンパイルセクションがいくつかあることがわかります。プロジェクトの設定を確認してください。問題が特定のソースファイルのコンパイル時にのみ発生する場合は、そのファイルのコンパイル設定も確認してください。

新しいプロジェクトを開始して、古き良きhello.cをコンパイルできるかどうかを確認することは確かに価値があります...

#include <stdio.h>
int main(int argc, char **argv) {
    printf("hello, world.\n");
    return 0;
}

そうでない場合は、VSのインストールに重大な問題があります。

他の可能性はあるがありそうもない問題の原因の1つは、他のコンパイラがインストールされていて、どういうわけか誤って別のコンパイラをstdio.h完全に使用してVSを取得した場合です...不適切なINCLUDE環境変数がそれを引き起こす可能性がありましたが、それが原因かどうかはわかりません最近のバージョンでは。私はずっと前にそれによってやけどを負い、それ以来、個々のコンパイラにどの変数をグローバル環境に設定させるかについて、はるかに注意を払ってきました。

于 2009-07-30T08:51:46.013 に答える
0

これは今日私に起こりました、そしてこのフォーラムで答えを探した後でも、それを解決するのに4時間もイライラしました。それで、他の誰かに再び起こる場合に備えて私の問題とその解決策を投稿させてください。

私はこれを持っていました(少しわかりにくい形で):

    namespace MyApp
    {

    #include "MyUtilities.hpp"

    };

    #include "MoreUtilities.hpp"

両方ともMyUtilities.hpp< MoreUtilities.hppwait.h>が含まれていましたが、sigval_tMoreUtilities.hpp内で標準システムタイプを使用しようとした(ライブラリによる)2回目の試行で、(標準ライブラリ内の)コンパイラエラーがスローされました。元のポスターに関しては、これがコンパイラーによって最初に検出されたエラーでした。私にとって、それは苛立たしい「タイプが見つかりません」エラーを生成しました。これは標準タイプであり、「私のコードにない」ことを考えると明らかに間違っているように見えました。

<wait.h>を2回含めると、定義が既に作成されているため、新しいコードは生成されませんでした。ただし、名前空間が異なるため、コンパイラーによって検出されませんでした。

もちろん、解決策は、#include <standard-header.h>すべてのローカル名前空間宣言の外側にあることを確認することです。

于 2011-11-23T23:36:39.050 に答える
0

標準行はコンパイルする必要があります。ただし、Visual Studioのインストールで提供されるヘッダーの一部のファイルを変更または削除した場合は、問題が発生し、すべてを再インストールする必要があります。

確認する1つの方法は、新しい「helloworld」コンソールアプリケーションを作成することです。stdafx.hにstdioが含まれます。

これがあなたの問題だとは思わないので、より良い答えが必要な場合は、問題についてさらに詳しく説明する必要があります。

stdioはstdafx.hに含まれていますか?

于 2009-07-30T08:49:33.600 に答える
0

エラーは、ほとんどの場合、 などの宣言されていない識別子_In_です。IntelliSense は、それらの定義を適切に検出します。この原因をどのような一般的な方向で探す必要がありますか?

宣言されていない識別子は、おそらく、標準ヘッダー自体がinclude別のヘッダーを (内部的に) 試行していて、それを見つけられず、適切に宣言/定義された識別子を取得していないことを意味します。

追加: たとえば、ある cpp ファイルでは stdio.h が最初に含まれるファイルです。その前に定義がありません。

Adefineは、定義とは異なる宣言とは異なります。あなたはすでにこれを知っているかもしれませんが、私はただ確信したいだけです.

質問は C++ としてタグ付けされているため、include cstdio代わりにstdio.h. おそらくコンパイラ エラーは修正されませんが、これは公式の C++ ヘッダーです。POSIX システムでは、標準の C ヘッダーが POSIX のもので拡張されることがあります。私の経験では、これらのヘッダーの C++ 化バージョンに同じ拡張機能はありません。

于 2009-07-30T09:16:42.533 に答える