当前位置:  开发笔记 > 编程语言 > 正文

全局变量和范围 - C++

如何解决《全局变量和范围-C++》经验,为你挑选了2个好方法。

我在使全局变量工作时遇到小问题.我使用的是Visual Studio 2008和标准C++.

我有两个项目,一个是静态库,第二个是使用该库的测试程序.我在global.h中有一个全局变量

#ifndef GLOBAL_H
#define GLOBAL_H

#include 

extern std::string globalWord;

#endif // GLOBAL_H!

我有一个global.cpp,我正在初始化这个变量.该变量在我的库项目中使用.我正在从测试项目中为此变量设置一个值,但该值未反映在库项目中.

我已调试并在测试项目中显示新值,但是当控件到达库项目时,此变量值显示为空.那么这个全局变量的范围仅限于它所属的项目吗?

或者有更好的方法吗?我不想修改我的库中的函数或构造函数参数来传递此值.

任何帮助都会很棒.

编辑:

以下是在global.cpp中声明此变量的方式

#include 
#include "../global.h"

std::string globalWord = "";

这就是我在我的库中使用它的方式

#include "../global.h"
string text = globalWord;

谢谢



1> Matt..:

不要使用全局变量.只是不要.更好的是,如果你必须拥有全局可访问的数据,那就是使用一个将返回globalWord的全局函数,如下所示:

std::string globalWord()
{
    static std::string word("Hi Mom");
    return word;
}

这样可以避免初始化顺序问题(阅读Effective C++ item#4).



2> Mark Ransom..:

使用"extern"关键字,您告诉编译器实际变量存在于其他位置.您还应该在一个且仅一个位置创建一个具有相同名称而没有extern的变量.通常情况下,如果你定义了其中的两个,你会从链接器中得到一个错误,但是如果你在库中有一个而不是它,那么它可能无法解决它.

编辑:确保global.cpp仅在库或测试程序中,而不是两者.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有