C ++中的Extern(VS2012)找到多个已定义的符号

时间:2013-02-13 15:47:55

标签: c++

我的代码在这里:

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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要将定义移动到一个且只有一个源文件。

int k = 10;

通过在头文件中定义变量,您违反了一个定义规则,因为变量的副本会在包含标题的每个翻译单元中定义。

答案 1 :(得分:0)

我完全按照你的方式构建了这段代码而没有任何错误......还有更多吗?

如果您有另一个包含&#34; Source1.h&#34;的源文件,您可能会遇到此行问题:

Source1.h

中的

int k = 10;

因为那么k将被多重定义。我会将int k=10移动到Source.cpp