c++ - 全局变量和作用域 C++

  显示原文与译文双语对照的内容

我在做全局变量工作时遇到了小问题。 我正在使用 Visual Studio 2008和标准 C++ 。

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


#ifndef GLOBAL_H


#define GLOBAL_H



#include <string>



extern std::string globalWord;



#endif//GLOBAL_H!



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

我已经调试并显示了测试项目中的新值,但是当控件到达库项目时,这个变量值显示空。 所以这个全局范围的变量只限于它所属的项目?

还是有更好的方法来做这个? 我不想在库中修改函数或者构造函数参数来传递这里值。

任何帮助都很有用。

编辑:

下面是在 global.cpp 中声明变量的方法


#include <string>


#include"../global.h"



std::string globalWord ="";



这就是我在图书馆里使用它的方式


#include"../global.h"


string text = globalWord;



谢谢

时间: 原作者:

不要使用全局变量只需不要。 如果必须具有全局可以访问性数据,就要使用全局函数返回 globalWord,如下所示:


std::string globalWord()


{


 static std::string word("Hi Mom");


 return word;


}



这样可以避免初始化顺序问题( 读取有效的C++ 项目 #4).

原作者:

使用"外部"关键字,你将告诉编译器实际变量存在于其他位置。 也应该在没有外部的情况下,在一个和只有一个位置创建一个具有相同 NAME的变量。 通常,如果在链接器中定义了两个错误,则会从链接器中获得错误。

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

原作者:
...