我的代码在这里:
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
我做错了什么?
答案 0 :(得分:2)
您需要将定义移动到一个且只有一个源文件。
int k = 10;
通过在头文件中定义变量,您违反了一个定义规则,因为变量的副本会在包含标题的每个翻译单元中定义。
答案 1 :(得分:0)
我完全按照你的方式构建了这段代码而没有任何错误......还有更多吗?
如果您有另一个包含&#34; Source1.h&#34;的源文件,您可能会遇到此行问题:
Source1.h 中的 int k = 10;
因为那么k将被多重定义。我会将int k=10
移动到Source.cpp