0

グローバル変数と同様に、グローバル名前空間を (externキーワードを介して) 定義するにはどうすればよいですか? 次のことを試しましたが、うまくいきません。

//header
#ifndef ASD_H
#define ASD_H

namespace Goo
{
    int var;
}
#endif

このヘッダー ファイルは.cpp、名前空間にアクセスする必要があるすべてのファイルに含めます。これは動作しません。これはどのように正しく行われますか?

4

1 に答える 1

3

デフォルトの名前空間はグローバル名前空間です。明示的namespaceにコードを追加しないでください。

そうは言っても、名前空間がどのように機能するかわからないので、これを求めています。彼らの仕事はスコープをクリアすることです。それらはオブジェクトではありません。それらはメモリを指していません。彼らはそのように非常に「柔らかい」です。すべてのファイルで名前空間を宣言でき、そのファイルに表示されるクラス、構造、関数などはその名前空間の一部になります。異なるファイルは、同じ名前空間を共有していることを他の方法で通信する必要はありません。テキストが同じ場合、それは同じ名前空間です。

あなたのコメントへの返信:

namespace One {
    intvar1;
}

namespace Two {
    int var2;
}

これは、他の翻訳単位で、名前空間になく、またはと入力した場合とまったく同じようにアクセスできますOne::var1Two::var2つまりvar1、必要に応じvar2て宣言する責任があります。extern

さらに、または共通のベース名前空間がある場合は使用できnamespace Base::OneますBase::Two

于 2013-03-14T17:49:15.187 に答える