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

2023-11-23

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

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

#ifndef GLOBAL_H
#define GLOBAL_H

#include <string>

extern std::string globalWord;

#endif // GLOBAL_H!

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

我已经调试过,它在测试项目中显示了新值,但是当控件到达库项目时,该变量值显示为空。那么这个全局变量的作用域只限于它所属的项目吗?

或者有更好的方法来做到这一点吗?我不想修改库中的函数或构造函数参数来传递此值。

任何帮助都会很棒。

Edit:

这是在 global.cpp 中声明该变量的方式

#include <string>
#include "../global.h"

std::string globalWord = "";

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

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

Thanks


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

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

这可以帮助您避免初始化顺序问题(请阅读《Effective C++》第 #4 条)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

全局变量和作用域 - C++ 的相关文章

  • 将 SQL Server varBinary 数据转换为字符串 C#

    我需要帮助弄清楚如何转换来自SQL服务器表列设置为varBinary 最大 转换为字符串以便将其显示在标签中 这是在C 我正在使用数据读取器 我可以使用以下方式提取数据 var BinaryString reader 1 我知道该列包含之前
  • 从 C 中的 char* 获取单个字符

    有没有办法在 C 中逐字符遍历或从 char 中提取单个字符 考虑以下代码 现在获得单个角色的最佳方式是什么 建议我一种不使用任何字符串函数的方法 char a STRING 其他方式 char i for i a i i i points
  • 如何重命名序列化对象列表后生成的 XML 属性

    我正在序列化对象列表List
  • C++ 和序列化:有什么方法可以进行某种内省吗?

    我读过一些例子维基百科 http en wikipedia org wiki Type introspection C 2B 2B但我正在寻找一些现实生活中的例子 如何使用内省 为什么 它有助于编写干净的代码 以及代码本身 例如 有没有办法
  • 计算复杂数组的abs()值的最快方法

    我想计算 C 或 C 中复杂数组元素的绝对值 最简单的方法是 for int i 0 i lt N i b i cabs a i 但对于大向量来说 速度会很慢 有没有办法加快速度 例如使用并行化 语言可以是 C 或 C 鉴于所有循环迭代都是
  • 增量决策树 C++ 实现

    有谁知道决策树分类器的增量实现吗 这样 当您将新实例添加到训练集中时 它可以根据现有决策树分类器以低计算量并尽可能快地生成最佳决策树分类器 换句话说 我有一个最优决策树分类器集A 其中命名为T 1 现在我想添加实例X to set A并找到
  • 通过用于 Symbol 条码扫描仪 DS4208 的 SNAPI.dll API 捕获图像

    我想通过 SNAPI API 从 Symbol 目前为 Zebra 条形码扫描仪 DS4208 型号 我们还使用 Zebra 的另一个但兼容的型号 捕获图像 条形码捕获 识别效果很好 但看起来像SnapiDLL SNAPI SnapShot
  • 我的 WPF 应用程序未触发 MainWindow_Loaded

    我目前正在关注Pluralsight C Fundamentals Part 1并在Classes and Objects视频部分指导我在 Visual Studio 中创建一个新的 WPF 应用程序并填写代码 这导致以下结果 namesp
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • 如何在Azure功能中添加razor视图文件?

    我正在创建一个应用程序 它是 azure 函数项目 我想在该项目中使用 Razor 视图 我应该在 azure 函数中使用任何模板引擎吗 得益于一些方面的进步剃刀之光项目 https github com toddams RazorLigh
  • 修改正在运行的可执行文件的资源内容

    All 我将应用程序设置存储在资源中 当我的程序首次加载时 我使用 WinAPI 读取指定的资源 然后我解析检索到的字节数据 这对我来说完美无缺 现在假设用户更改了我的应用程序中的设置 他 她检查复选框控件 我想将更新的设置保存到我的资源中
  • 如何使用 ProtoGen 从 proto 文件生成结构

    我们一直在使用 protobuf net ProtoGen 从 proto 文件生成 C cs 文件 我们希望代替类来生成结构 例如 DataContract public struct Entity1 ProtoMember 1 publ
  • 从视图模型调用方法的命令

    好吧 我倾向于避免使用命令 因为它们总是让我感到困惑 但我正在进行一个新项目 并且正在尝试正确构建它 并且在我看来没有任何代码隐藏 基本上我现在想做的就是连接一个按钮来触发一个命令 在我的视图模型上执行一些操作 但不知何故 如此简单的事情仍
  • 使用 _Alignas 进行结构成员对齐

    我想知道以下问题 是新的吗 Alignas结盟 C11 中的说明符适用于结构成员吗 我一直假设这么多 但彻底阅读了 N1570 公开草案似乎表明对齐说明符不能 出现在一个说明符限定符列表 这就是我所期望的 如果得到支持的话 我已经读过几遍语
  • C++ 联合数组和变量?

    在C 中没有办法做这样的事情吗 union Scalar x y Scalar v 2 Where x v 0 and y v 1 既然您使用的是 C 而不是 C 并且它们具有相同的类型 为什么不直接将 x 设为对 v 0 的引用 将 y
  • 返回 ICollection 而不是 List 的真正优势是什么? [复制]

    这个问题在这里已经有答案了 我读过几篇博客文章 提到对于公共 API 我们应该始终返回 ICollection 或 IEnumerable 而不是 List 返回 ICollection 而不是 List 的真正优势是什么 Thanks 复
  • C# 3.0 中自动属性和公共字段的区别

    我无法理解为什么 C 3 0 中存在自动实现的属性语言功能 当你说的时候有什么区别 public string FirstName than public string FirstName get set 因为它们在生成的 IL 代码 和机
  • Linux shell 标题大小写

    我正在编写一个 shell 脚本并有一个如下所示的变量 something that is hyphenated 我需要在脚本中的各个点使用它 如下所示 something that is hyphenated somethingthati
  • asp.net mvc GET 请求上的 formcollection 应该为空

    我正在发布一个简单的操作 public void Login FormCollection formCollection 即使查询字符串值很少 formcollection Count is 0 是靠行为吗 FormCollection 使

随机推荐

  • 在谷歌地图反向地理编码中获取明确的城市名称

    使用 Google 地图地理编码 API 我能够获取特定坐标的格式化地址 为了获得确切的城市名称 我正在执行以下操作 ajax url http maps googleapis com maps api geocode json latln
  • 在 PHP 中模拟 LIKE

    有没有办法用相同的语法在PHP中模拟SQL的LIKE运算符 and 通配符和泛型 escape转义字符 这样就有 value LIKE string ESCAPE escape 你可以有一个函数 在不使用数据库的情况下返回 PHP 评估吗
  • 如何在Python中获取/设置逻辑目录路径

    在 python 中 是否可以获取或设置逻辑目录 而不是绝对目录 例如 如果我有 real path to dir 我有 linked path to dir 链接到同一目录 使用 os getcwd 和 os chdir 将始终使用绝对路
  • 如何在下载真实图像之前显示占位符图像?

    这个想法是在下载真正的高分辨率图像之前显示图像的低分辨率版本 最好使用 img 标签 img 低分辨率图像首先可见 下载后将替换为高分辨率图像 如何才能做到这一点 是否可以编辑 img src 属性 或者应该创建其他内容 例如带背景的包装
  • 分析 C++ 多线程应用程序

    您是否使用过诸如 Intel Vtune 分析器之类的分析工具 您对 Linux 和 Windows 上的 C 多线程应用程序有何建议 我主要对缓存未命中 内存使用 内存泄漏和 CPU 使用感兴趣 我使用 valgrind 仅在 UNIX
  • angular-i18n Angular 6 国际化:如何处理变量

    我已经在这里阅读了整个文档 https angular io guide i18n 我无法弄清楚我应该如何处理这种性质的 html 标签 div class title text currentPage div 或者这样的 div clas
  • Haskell IO 测试

    我一直试图弄清楚 Haskell 中是否已经有一种可接受的测试文件 io 操作的方法 但我还没有找到任何对我想做的事情有用的信息 我正在编写一个执行各种文件系统操作的小型库 递归遍历目录并返回所有文件的列表 同步多个目录 以便每个目录包含使
  • 使用“同名”属性实现 2 个接口

    这似乎是一个合理的 也许很简单 场景 但是您将如何执行以下操作 假设我有 2 个接口 Interface ISimpleInterface string ErrorMsg get End Interface Interface IExten
  • 从 Google Cloud 流式传输视频

    我正在考虑为我的项目使用 Google App Engine 和 Google Cloud Platform 而不是使用 Amazon AWS 我需要能够大量流式传输视频 并在需要时快速扩展 App Engine 看起来非常适合负载平衡 扩
  • 如何在多线程之间共享一笔事务

    我们遇到了一个使用多线程的场景 在主线程中 执行一些逻辑并更新数据库 在某个时刻 它会调用另一个服务来更新数据库 该服务在另一个线程中运行 我们希望两个线程共享同一个事务 也就是说 任何一个线程中的操作失败 那么另一个线程中的操作也会被回滚
  • 是否有关于在 iPhone 上的 openGL ES 中加载 3D 模型的教程?

    不久前我开始接触一些 3D 建模者 现在我很好奇 如何将这样的 3D 模型带到 iPhone 或 iPad 上 以便我可以在屏幕上看到它 甚至可以通过手势旋转它 1 3D 模型的最佳文件格式是什么 2 如何将特定的 3D 模型文件加载到 o
  • 路由测试 ASP.NET MVC4

    我一直在使用 MvcRouteUnitTester codeplex and nuget 跑步自动化单元测试反对我的路线 体验一下它的功能 assert incoming route tester WithIncomingRequest F
  • gradle“构建”任务混乱

    您好 我有多项目 gradle 设置 root project sub project1 sub project2 sub project3 一切都很好 但有一件事让我发疯 在我的构建脚本中 defaultTasks build lt th
  • 保存方向变化时的片段状态

    我正在为 Android 创建一个文件管理器应用程序 下面的两个类是执行此操作的主要逻辑 我正在做的是 在 ContentList 启动时 它将 ContentListFragment 添加到 ContestList xml 中的容器布局中
  • 在 F#/OCaml 中实现类快速排序函数的尾递归版本

    是否可以实现快速排序算法的尾递归版本 通过延续模式 如果是的话 将如何实施 普通 未优化 版本 let rec quicksort list match list with gt element gt element pivot rest
  • 为每个可变参数模板参数和数组调用函数

    所以我有一些类型X typedef X 和一个模板函数f class
  • 如果出现编译时警告,是否可以让编译器提前退出,导致构建失败?

    我发现编译时警告非常有用 但我偶尔会错过它们 特别是如果它是在 CI 服务器上运行测试的拉取请求上 理想情况下 我会在项目混合文件中指定一些内容 以使编译器更加严格 我希望这对所有混合任务都有效 并且我不想必须将标志传递给命令 因为这很容易
  • STL排序使用交换还是二进制复制?

    我很难找到一个好的答案 出于某种原因 我认为 STL 排序可以使用交换来实现 以便更好地支持复杂类型 但当我最终深入研究代码时 它似乎实际上是在进行二进制复制 有人可以证实这一点吗 我想二进制副本实际上比交换更受欢迎 附带问题 是否有任何
  • 类型错误:序列项 1:需要一个类似字节的对象,找到 str

    我正在尝试使用 Python 3 中的正则表达式从文本文件中的 wiki 标题转储中提取英文标题 wiki 转储还包含其他语言的标题和一些符号 下面是我的代码 with open Users some directory title txt
  • 全局变量和作用域 - C++

    我在使全局变量起作用时遇到了小问题 我正在使用 Visual Studio 2008 和标准 C 我有两个项目 一个是静态库 第二个是使用该库的测试程序 我在 global h 中有一个全局变量 例如 ifndef GLOBAL H def