クラス定義で静的 Const 整数メンバーを定義する際のリンカー エラー
C のクラス宣言では、クラス内で静的 const 整数メンバーを定義できます。クラス。ただし、次の例のようなコードではリンカー エラーが発生する可能性があります。
class test { public: static const int N = 10; }; int main() { std::cout << test::N << "\n"; std::min(9, test::N); }
コンパイラーはクラス定義を受け入れますが、リンカーは test::N への未定義の参照を報告します。この問題は、クラス内の宣言が真の定義ではないために発生します。
C では、静的 const 整数メンバーはクラスの外側の名前空間スコープで定義する必要があります。これは、C 標準 (9.4.2/4) に従ってクラス宣言内で初期化できないためです。
静的データ メンバーが const 整数型または const 列挙型の場合、クラス定義内のその宣言constant-initializer [...] を指定できます。その場合、メンバーは整数定数式で使用できます。プログラム内でメンバーが使用されている場合でも、メンバーは名前空間スコープ内で定義され、名前空間スコープ定義に初期化子が含まれてはなりません。
リンカー エラーを解決するには、クラスの外で静的 const メンバーを定義できます。通常、対応するソース ファイル内にあります:
const int test::N = 10;
または、C 11 以降では、constexpr キーワードを使用して、クラス宣言:
class test { public: static constexpr int N = 10; };
以上がC クラスで静的 Const 整数メンバーを定義するとリンカー エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。