0

私は3つのファイルを持っています:header.h

#ifndef _HEADER_
#define _HEADER_

int var = 0;

#endif

src1.cpp

#include "somefile.h" 
extern int var;
int main(void) { // error: first defined here
    var = 10;
    return 0;
}

src2.cpp

#include "somefile.h"
extern int var;

int foo () { // error : multiple definition of 'var'
    return 0;
}

この状況で「extern」キーワードを使用できない理由がわかりません。これらのエラーを修正するにはどうすればよいですか?

4

3 に答える 3

4

の宣言を置く

int var = 0;

ヘッダーファイルではなく、cppファイルの1つにあります

と置く

extern int var;

ヘッダーファイルのみ

于 2013-03-26T15:58:10.537 に答える
3

あなたはそれを間違った方法でやっています。宣言をヘッダーファイルに入れ、extern変数が必要なときはいつでもそれをインクルードし、1つのソースファイルでそれを定義します。

今のところ、ヘッダーを含むすべてのソースファイルには独自の定義があり、プログラムをリンクするとそれらは互いに衝突します。

于 2013-03-26T15:57:53.613 に答える
0

推測させてください、somefile.hにはheader.hが含まれています。

あなたがしたい変数を外部化するとき、あなたがしたように、その変数を正確に一箇所で非外部化させてください。その場所に.cファイルを作成します。ヘッダーファイルの場合、インクルードされるすべての場所で独自のコピーが取得され、「'var'の複数の定義」が発生します。

動く

int var = 0;

srcファイルの1つに。

于 2013-03-26T15:58:55.750 に答える