ホームページ > バックエンド開発 > C++ > C クラスで静的 Const 整数メンバーを定義するとリンカー エラーが発生するのはなぜですか?

C クラスで静的 Const 整数メンバーを定義するとリンカー エラーが発生するのはなぜですか?

Linda Hamilton
リリース: 2024-12-01 13:14:09
オリジナル
239 人が閲覧しました

Why Do I Get a Linker Error When Defining Static Const Integer Members in a C   Class?

クラス定義で静的 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート