WizardからVisual Studio 2013でC ++クラスを作成したとき、StdAFX.hからのヘッダーを含める必要はありません
-
21-12-2019 - |
質問
私は私が説明できないCuriosのことを見つけました。 vs2013でクラス作成ウィザードを使用すると、定義されたクラスベースの.h、.cppファイルが作成されます。
例ヘッダーファイル:
#pragma once
class SomeClass
{
public:
SomeClass();
~SomeClass();
};
.
それから私はいくつかの私たちを追加しました。私はSTDAFXのこれらの名前空間を持つヘッダーを含めました。SFMLからのSTDとSFは私のアプリで使用されています:
#pragma once
using namespace std;
using namespace sf;
class SomeClass
{
public:
SomeClass();
~SomeClass();
};
.
とすべてがうまく機能します。stdafx.hは、headerファイルには含まれていません.cpp。
しかし、同じクラス構造を使用してヘッダファイル(.cppなし)の手動作成を使用します:
#pragma once
using namespace std;
using namespace sf;
class SomeOtherClass
{
public:
SomeOtherClass();
~SomeOtherClass();
}
.
ではうまくいきません。VSは「SF」ネームスペースが見つからないと言っていますが、「STD」ネームスペースに問題はありません。
それは私が知りたいことです:最初のケースが有効であり、VSがプリコンパイルされたヘッダーと2番目のケースからネームスペースを見つけていない理由。
解決
ヘッダーファイルは単独でコンパイルされません。cpp
またはc
ファイルのみがコンパイルされ、ヘッダーファイルはそれらを#include
のときにプリプロセッサによってコピーされます。
それは、ヘッダーの名前空間を含めるすべてのCPPファイルに、がヘッダーの含める前に、それが機能します。コンパイラはそのファイル内のヘッダーのコードをコンパイルする前にネームスペースを見つけるためです。
それは良くないが練習ではありません。ヘッダーはそれ自身で動作する必要があり、CPPファイルに依存していません。includeの前に何かを行う必要はありません。
所属していません StackOverflow