【发布时间】:2021-08-09 23:42:36
【问题描述】:
嗯,我正在学习 C++,但从未真正学会如何做非面向对象的事情。 我正在尝试获得更多 C 风格的编码经验。
GobalInformation.h
#pragma once
#ifndef GLOBALINFORMATION_H
#define GLOBALINFORMATION_H
#include "MapInformation.h"
namespace gi {
MapInformation mapInf;
};
#endif
我希望能够从我项目中的每个标头和 cpp 访问 gi::mapInf。现在我在每个头文件中都包含 globalinformation.h,所以我遇到了多个定义的链接器错误。
我该如何解决这个问题?
【问题讨论】:
-
你现在可能认为你想要这个全局变量,但我保证你会后悔的。
-
@BjörnPollex 请详细说明
-
OT:为什么要使用
#pragma once和标头保护(顺便说一句,没有唯一标识符 => 危险)? -
@Andre 嗯,我在 wikipedia 上读过它可能会很好:en.wikipedia.org/wiki/Pragma_once
-
@xcrypt:使用标头保护时,您应该附加一个唯一部分以避免名称冲突。您可以像这样添加 GUID:
#ifndef GLOBALINFORMATION_H_8FF7B23E1B4D11E18852C5D64824019B、#define GLOBALINFORMATION_H_8FF7B23E1B4D11E18852C5D64824019B。如果您不需要可移植性,我建议您仅在编译器支持的情况下使用#pragma once。
标签: c++ c global-variables