c ++包括警卫不起作用,错误[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++包括警卫不起作用,错误[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

当我编译这段代码时,我收到一个错误“错误LNK2005”int一个“(?a @@ 3HA)已在file.obj代码中定义:main.cpp:

#include "header.h"
int main()
{
    return 0;
}

file.cpp:

#include "header.h"
void function()
{

}

header.h:

#ifndef HEADER
#define HEADER
int a;
#endif

提前致谢

答案

在单个文件中包含两次包含头文件的防护装置,但这里有两个不同的文件。我的建议是不要在头文件中定义任何变量。而是将它们声明为extern并在单独的cpp文件中定义它们,其中包含头文件。这样,您将只有一个定义,但您将在使用它们的地方声明它们。

另一答案

在你的头文件中

 Int a;

只要包含该头文件,就会有一个全局变量a

然后在目标文件中有两个版本的a

得到链接。 AARGH链接器不知道如何解决它。

解决方案从头文件中删除int a。如果必须,请使用extern。但最好的事情不是拥有全局变量

以上是关于c ++包括警卫不起作用,错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

加载文件不起作用,但加载窗口确实[重复]

函数内部的mysqli / mysql查询不起作用[重复]

Flexbox 在 Safari 9.1.1 上不起作用 [重复]

剪贴板在 C# 控制台应用程序上不起作用 [重复]

c read() 导致错误的文件描述符错误

SonarQube使用方法