2016-09-29 48 views
0

我今天早上在工作中遇到了一些奇怪的事情,我真的需要谈论它,我在头文件中的一个未命名的名称空间中有一个字符串对象,最后一个包含在主要的cpp文件和其他cpp文件。全局字符串在收到非空内容后保持空白

在main()中,我注意到当这个全局字符串对象使用它的=运算符来设置函数返回的值(一个非空字符串)时,它保持为空!而如果我通过本地字符串更改全局字符串,则最后一次使用新内容正确更新。我记得遇到来自全局变量的奇怪行为,我真的想知道发生了什么。这就像编译器没有正确编译程序...

是否有一些人遇到类似于全局变量的东西,并理解发生了什么?

我解决了这个问题,用一个类来代替未命名的命名空间,并在其中声明了静态字符串。

+0

你可以发布一些代码给你的问题更多的上下文。 – Alex

+0

我需要重现这个问题,我将在明天完成 – Aminos

+5

“我在头文件**中的一个未命名的名称空间**中有一个字符串对象” - 然后,您为每个包含该变量的文件都有一个单独的副本标题。 – user2357112

回答

2

不要在头文件中使用未命名空间。

未命名的命名空间将为其包含的每个文件创建一个新的匿名命名空间,并且一个未命名的命名空间只能在文件中出现一次,因此只能使用一个具有未命名命名空间的标头。

使用命名的命名空间或类(就像你在你的问题中提到的)会更好。

+0

还有“extern”关键字可以帮助... – Aminos

+0

我的团队成员在今天有这个问题,他的常量是在一个命名空间。最终帮助的是'constexpr' –

+0

@GioraGuttsait:使用'constexpr' **掩码**的错误,但没有解决它。如果要在编译单元之间共享一段数据,只需在头文件中声明**(使用'extern'说明符),然后在单个编译单元中定义它。 – IInspectable