28

VSで「すべてのファイルを表示」オプションをオンにして、フォルダーを追加し、そのフォルダーに新しいクラスを作成しました。私はプリコンパイル済みヘッダーを使用しているので、新しいクラス ファイルのルート ディレクトリにある stdafx.h も含める必要があります。

私のcppファイルには

#include "..\stdafx.h"

それでも、次のエラーが表示されます。

エラーC1010 : プリコンパイル済みヘッダーの検索中に予期しないファイルの終わりが発生しました。ソースに「#include "stdafx.h"」を追加するのを忘れていませんか?

私の理解では、.. はコンパイラに 1 つ上のディレクトリ レベルに移動するように指示する必要があります。

4

9 に答える 9

21

Visual C++ では、プリコンパイル済みヘッダー ファイルを設定するいくつかの方法を定義できます。最も一般的なのは、プロジェクト構成レベルですべてのソース ファイルに対して有効にすることです。構成プロパティ/C++/プリコンパイル済みヘッダーの下で、[プリコンパイル済みヘッダー] を設定し、[使用] を選択します。「プリコンパイル済みヘッダー ファイル」を設定する同じ場所は、通常「stdafx.h」です。すべてのファイルがこの設定を取得します (したがって、プロジェクトでの構成) 例外....

1 つのファイルが PCH ファイルの生成を担当します。そのファイルは通常、プロジェクトの stdafx.cpp ファイルであり、通常、.cpp 以外には何も含まれていません#include "stdafx.h"。その 1 つのファイルのプリコンパイル済みヘッダーを構成し、「使用」から「作成」に切り替えます。これにより、PCH のプライムヘッダーが同期しなくなった場合、stdafx.cpp が常に最初にコンパイルされ、PCH データファイルが再生成されます。Visual Studio で PCH 設定を構成する方法は他にもありますが、これが最も一般的です。

そうは言っても、あなたの問題は間違いなくイライラしています。PCH システムの準備に使用され、上記の「使用...」と「作成...」設定の両方で指定されたファイル名は、#include のテキストと正確に一致する必要があります。

したがって、プロジェクトのインクルード ディレクトリに「..」を追加し、#include ステートメントから「..」を削除することで、問題に対処できる可能性が高くなります。プロジェクト構成レベルでスルー ヘッダーとして "..\stdafx.h" に変更することもできますが、階層的に複数のフォルダーにソース ファイルがある場合は問題になる可能性があります。

ああ、PCH 構成設定を熟読しているときに明確ではなかった場合、特定のソース ファイルに PCH を使用したくない場合 (そして、そうしない理由がある場合もあります)、特定のソース ファイルに対してそれをオフにすることができます。それ以外の場合は、必ずすべてのソース ファイル (c/cpp など) の先頭に #include "your-pch-include-file.h" を含めてください。

休憩をとってください。

于 2012-09-15T06:08:09.937 に答える
14

私が使用するトリックが回答に含まれていないのは興味深いことです。

  1. プロジェクトのルート フォルダーに stdafx.h と stdafx.cpp を作成します。
  2. プロジェクトのプロパティ -> プリコンパイル済みヘッダーに移動します。「使う」に変更。
  3. stdafx.cpp に移動し、[プロパティ] -> [プリコンパイル済みヘッダー] を右クリックします。「作成」に変更します。
  4. プロジェクトのプロパティに移動します -> 詳細; 「強制インクルード ファイル」を stdafx.h;%(ForcedIncludeFiles) に変更します。

CPP ファイルは変更しないでください。ヘッダーファイルをそのままにしてください。そのままビルドします。

タイピング、RSI、インクルード パスの煩わしさ、その他の苦痛や悲惨さはありません。そしてすばらしいのは、ソリューションを別のプラットフォームに移動しても機能することです。素晴らしい。

于 2016-06-08T17:47:28.023 に答える
2

PCH ファイルは奇妙で、Visual Studio ではなおさらです。PCH を使用する .cpp ファイルをコンパイルするとき、VS は最初の非コメント/空白テキストが#include "PCH_NAME_HERE". まさにPCH の名前ですPCH_NAME_HERE。ディレクトリも何もありません。コンパイラ オプションで指定された PCH の名前のみ。

このディレクトリごまかしを行う場合は、コンパイラの設定を変更して、PCH があるディレクトリがディレクトリ検索パスに含まれるようにする必要があります。そうすれば、あなたはその部分を持っている必要はありません..\

于 2012-09-15T03:26:50.687 に答える
-1

プロジェクトの .cpp ファイルと .h ファイルが別のサブディレクトリ (プロジェクトのディレクトリではなく) にある場合は、ソリューション ディレクトリに対するインクルード パスを使用するのが適切なコーディング スタイルです (専用のディレクトリを使用しない場合)。インクルード ディレクトリ)。特に、ソリューションに複数のプロジェクトがあり、インクルード ファイルを共有する必要がある場合 (たとえば、.exe と .dll などのプロジェクト間の相互運用性のために)。

プロジェクトをリファクタリングするには、次のことを行う必要があります。

  1. 各プロジェクトで、追加のインクルード ディレクトリ $(SolutionDir) を指定します。プロジェクトを右クリックし、[プロパティ] をクリックし、[構成プロパティ] -> [C/C++] -> [全般] に移動します (すべての構成に対して一度にこれを行うには)。 、「構成」ドロップダウンから「すべての構成」を選択します)
  2. "C/C++" -> "Precompiled Headers" に移動し、"Precompiled Header File" の値をソリューション ディレクトリへの相対パス (例: PROJECT_NAME/stdafx.h) に変更します。
  3. .cpp ファイルには、「stdafx.h」だけでなく、「PROJECT_NAME/stdafx.h」が含まれます。
  4. .h および .cpp ファイルに何かを含めるときは、パスを「PROJECT_NAME/dir1/dir2/file.h」として使用します。ただし、同じディレクトリからファイルを含める場合は除きます。
于 2015-06-05T07:54:53.610 に答える
-4

引用符を使用するということは、自分が使用しているヘッダー ファイルであることを<>意味し、システム ヘッダー ファイルであることを意味します#include <stdafx.h>

于 2012-09-15T03:22:33.047 に答える