C++ #pragma once在visual studio中不起作用

C++ #pragma once在visual studio中不起作用,c++,C++,我正在使用visual studio,而“pragma once”不起作用。这是我得到的以下错误: 1>namespaces.obj : error LNK2005: "int a" (?a@@3HA) already defined in another.obj 1>fatal error LNK1169: one or more multiply defined symbols found 这些是文件 main.cpp #include <iostre

我正在使用visual studio,而“pragma once”不起作用。这是我得到的以下错误:

1>namespaces.obj : error LNK2005: "int a" (?a@@3HA) already defined in another.obj
1>fatal error LNK1169: one or more multiply defined symbols found
这些是文件

main.cpp

#include <iostream>
#include "Header.h"

int main()
{
    std::cout << a;
}

#pragma once
并不意味着“仅在一个源文件中包含我”,而是“在单个源文件中只包含我一次。

正是出于这个原因,您不应该在头文件中定义全局变量
#pragma once
不能保护您免受此类错误的影响。事实上,没有什么可以保护您免受此类错误的影响,因为每个源文件都是分别编译的。一个编译单元中发生的事情对另一个编译单元中发生的事情没有影响

解决方法是移动
inta=5
改为
main.cpp
,并将
header.h
改为
extern inta

#include <iostream>
#include "Header.h"

void hi() {
    std::cout << a;
}
#pragma once

int a = 5;