0

私のコードはここにあります:

Header.h ファイル:

#ifndef HEADER_H_
#define HEADER_H_

extern int k;

#endif /* HEADER_H_ */

Source1.h ファイル:

#include <iostream>
#include "Header.h"
using namespace std;

#ifndef SOURCE1_H_
#define SOURCE1_H_

int k = 10;

void punch(){
    cout << k << endl;
}

#endif /*SOURCE1_H_*/

Source.cpp ファイル:

#include "Source1.h"
using namespace std;

int main()
{
punch();
cin.get();
return 0;
};

Windows 7 の Visual Studio 2012 Express Edition でコンパイルしています。エラー コードは次のとおりです。

1>c:\users\freeman\documents\visual studio 2012\Projects\exploringexterns\Debug\exploringexterns.exe : fatal error LNK1169: one or more multiply defined symbols found

私は何を間違っていますか?

4

2 に答える 2

2

定義を 1 つのソース ファイルだけに移動する必要があります。

int k = 10;

ヘッダーファイルで変数を定義すると、ヘッダーを含める各翻訳単位で変数のコピーが定義されるため、1 つの定義ルールに違反します。

于 2013-02-13T15:49:49.130 に答える
0

私はこのコードをエラーなしであなたが持っているのとまったく同じように構築しました...他にありませんか?

"Source1.h" を含む別のソース ファイルがある場合、次の行で問題が発生する可能性があります。

int k = 10;Source1.h で

k が乗算定義されるためです。私はint k=10Source.cppに移動します

于 2013-02-13T15:57:50.693 に答える