WizardからVisual Studio 2013でC ++クラスを作成したとき、StdAFX.hからのヘッダーを含める必要はありません

StackOverflow https://stackoverflow.com//questions/25028808

質問

私は私が説明できない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の前に何かを行う必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top