0

我正在使用 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

这些是文件

主文件

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

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

另一个.cpp

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

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

头文件.h

#pragma once

int a = 5;
4

2 回答 2

5

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

于 2020-12-23T05:59:43.860 回答
1

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

解决的办法就是搬来int a = 5;main.cpp换来header.h再说extern int a;

于 2020-12-23T06:27:39.843 回答