ホームページ  >  記事  >  バックエンド開発  >  複数の C ファイルで同じ変数を定義すると、「エラー LNK2005: すでに定義されていますか?」エラーが発生するのはなぜですか?

複数の C ファイルで同じ変数を定義すると、「エラー LNK2005: すでに定義されていますか?」エラーが発生するのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-30 01:43:29772ブラウズ

Why am I getting the

エラー: "エラー LNK2005: すでに定義されていますか?"

コンソール アプリケーションで、ファイル A.cpp および B.cpp のコンパイル中に予期しないエラーが発生しました。 。どちらのファイルにも次のコードが含まれています:

#include "stdafx.h"
int k;

ただし、コンパイル プロセスでエラーが生成されます:

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj

このエラーは、「1 つの定義ルール」の違反に起因します。 C では、各変数、関数、オブジェクトは 1 回だけ定義できます。あなたの場合、A.cpp と B.cpp の両方で変数 "k" を定義しました。

ソリューション

無名名前空間の使用

必要に応じて両方のファイルで同じ名前の変数を使用するには、名前のない名前空間 (匿名名前空間) を利用して競合を回避できます。

namespace
{
    int k;
}

名前空間内で "k" をカプセル化することで、その範囲を効果的に制限します。

外部宣言の使用

複数のファイル間で "k" 変数を共有する場合は、外部宣言と定義の手法を使用できます。

A.h (ヘッダー ファイル)

extern int k;

A.cpp

#include "A.h"
int k = 0;

B.cpp

#include "A.h"

// Use 'k' variable as needed

このシナリオでは、A.h で変数を外部として宣言し、A.cpp で定義します。 B.cpp ファイルには、変数にアクセスするために A.h を含めるだけで、定義の競合を回避できます。

以上が複数の C ファイルで同じ変数を定義すると、「エラー LNK2005: すでに定義されていますか?」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。