0

Noob の質問ですが、次のことを理解したいと思います。

マルチファイル プロジェクトがあるとします。プロジェクト内のすべてのファイル間で共有されるヘッダー ファイル内のクラスを指定しています。次の行に次のように記述します。static int test = 0;static const int MAX = 4;

最初のものは、定義規則が 1 つであるため、コンパイルしようとするとエラーになります。しかし、2 番目のものはエラーなしでコンパイルされます。なんで?

私が理解していることから、どちらも同じプロパティを持っています。つまり、実行ストレージ全体の期間、クラスのスコープ、リンケージはありません。

何か助けはありますか?

編集: ヘッダー内の外部定数宣言のテスト:extern const int MAX = 4;外部リンケージを強制すると、予想されるエラーが発生しました。したがって、変数ではエラーが発生し、定数ではエラーが発生しない理由がわかりません。

4

2 に答える 2

2

試す

static const int test = 0;

ヘッダー ファイル内の static const 変数をすぐに初期化すると、コンパイラ エラーが発生することがあります。ヘッダーでいつでも宣言を使用できます

class MyClass
{
    // ...
    static const int test;
    // ...
}

対応する .cpp ファイルで初期化します

const int MyClass::test = 0;

これは、他のタイプでも適切に機能するはずintです。

于 2012-08-17T17:56:57.797 に答える
1

C++ の整数定数は、実際にはオブジェクト内のスペースを占有せず、一般に変数のようには機能しません。この特定のコンテキストで名前が付けられている数字のように考えてください。

于 2012-08-17T17:49:14.620 に答える