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_*/

源.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

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

int k = 10;

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

于 2013-02-13T15:49:49.130 回答
0

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

如果您有另一个包含“Source1.h”的源文件,您可能会遇到以下行的问题:

int k = 10;在 Source1.h

因为那时 k 将被多重定义。我会将其int k=10移至 Source.cpp

于 2013-02-13T15:57:50.693 回答