将类静态成员定义放入 cpp 文件 - 技术限制?

2023-12-08

当用 C++ 编码时,我“最喜欢”的烦恼之一是在我的类中声明一些静态变量,然后查看有关未解析的静态变量的编译错误(在早期,我总是害怕它意味着什么)。

我的意思是经典的例子,比如:

Test.h

class Test
{
private:
  static int m_staticVar;
  int m_var;
}

Test.cpp

int Test::m_staticVar;

在我看来更令人困惑的是这个定义的语法,你不能在这里使用“静态”这个词(因为静态在cpp中使用时有不同的含义,叹息)所以你不知道(除了静态成员的知识) vars 像这样工作)为什么 Test 类中有一些 int 以这种方式定义,而为什么 m_var 不是。

据您所知/认为,这是为什么?我只能想到一个原因,那就是使链接器的生活更容易——即出于同样的原因不能使用非整数常量(SomeClass m_var = some)。但我不喜欢仅仅因为编译链的某些部分很难吃掉它而改变语言功能的想法......


嗯,这就是它的工作原理。您仅在 .h 文件中声明了静态成员。链接器需要能够准确地找到一个定义它链接在一起的目标文件中该静态成员的名称。您不能将定义放在 .h 文件中,这会生成多个定义。

更新:C++17 可以通过以下方法解决这个问题内联变量.

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

将类静态成员定义放入 cpp 文件 - 技术限制? 的相关文章

  • 为什么存在 async 关键字

    浏览 msdn 9 频道视频时 我发现以下未答复的评论 希望有人能解释一下 我不明白 async 关键字的意义 为什么不直接允许 任何时候方法返回任务时都会使用await关键字 就像迭代器一样 可以在任何返回 IEnumerable 的方法
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 为什么要在 C++ 中使用 typedef?

    可以说我有 set
  • 从 Delphi 调用 C# dll

    我用单一方法编写了 Net 3 5 dll 由Delphi exe调用 不幸的是它不起作用 步骤 1 使用以下代码创建 C 3 5 dll public class MyDllClass public static int MyDllMet
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 在 C++17 中使用 成员的链接错误

    我在 Ubuntu 16 04 上使用 gcc 7 2 并且需要使用 C 17 中的新文件系统库 尽管确实有一个名为experimental filesystem的库 但我无法使用它的任何成员 例如 当我尝试编译此文件时 include
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 为什么文件更新时“如果较新则复制”不复制文件?

    我在 Visual Studio Express 中有一个解决方案 如下所示 The LogicSchemaC 中的类 将在运行时解析指定的 XML 文件 以下是在main的方法Program cs LogicSchema ls new L
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne

随机推荐

  • 如何在 Verilog 中定义带参数的模块?

    我想定义一个add有一个参数的模块 但我对新实例的声明进展不顺利 我想定义这个模块的一个实例 module add parameter wd 1 input wire wd 1 0 a b output wire wd 1 0 o assi
  • 将自定义对象的 ArrayList 写入文件

    我有一个 ArrayList 其中包含自定义服务对象 我想将整个 ArrayList 写入一个文件 然后能够读取它 我尝试了 Gson 但它给了我一个 IllegalStateException Expected BEGIN ARRAY b
  • 将可见性绑定到 DataContext

    我有一个值转换器 可以将 null 转换为 Visibility Collapsed 现在我尝试在用户控件中使用它 以便当 DateContext 为 null 时整个控件会崩溃 该控件如下所示
  • 对多个列使用 CROSS APPLY

    使用 SQL Server 第 3 天 我正在尝试将 2 列分隔数据合并为表值函数的一个输出 这是我的数据 我希望处理数据并将其放入以下格式的表中 我目前trying使用这个 CROSS APPLY SQL 语句 但我不知道我在做什么 US
  • AngularJS - 将 ngTouch 重定向与 ngRoute 一起使用不适用于 href 和 ng-click 属性

    我使用 ngRoute 浏览应用程序 我使用如下链接 a href page2 Link a 由于我使用 ngTouch 导航不适用于触摸设备 我用 Android 手机和 Chrome 的设备模拟器尝试过 在桌面上一切正常 当我删除 ng
  • VSTO WPF ContextMenu.MenuItem 单击未引发的 TaskPane 外部

    当光标位于任务窗格之外时 不会引发上下文菜单项的单击事件 我不知道如何让它发挥作用 90 的情况下 单击是在任务窗格之外进行的 打开上下文菜单时 子菜单通常显示在任务窗格之外 见下图 在这种情况下 不会引发上下文菜单中的单击事件 我完全不知
  • 在scrapy框架python中为start_urls列表中的url构建正则表达式

    我对 scrapy 很陌生 之前也没有使用过正则表达式 以下是我的spider py code class ExampleSpider BaseSpider name test code allowed domains www exampl
  • 为什么同步睡眠函数没有通过在 Promise 中实现异步? [复制]

    这个问题在这里已经有答案了 我正在尝试了解 Promise 以及 JavaScript 如何与其队列和事件循环等一起工作 我认为如果我将一个慢速同步函数放入一个承诺中 该慢速同步函数将被委托给后台 我可以使用 then完成后处理它 func
  • 优化(几乎最小化)jqueryui 菜单的宽度

    我有一个Jqueryui菜单这是在运行时生成的 AJAX 它是生成的 HTML is ul li li li the system li li the agenda li ul 首先 li li 是故意的行分隔符 其他列表项都包含单个单词
  • 从图像 numpy 生成一批克隆

    我有一个numpy数组 图像 称为a这个尺寸 3 128 192 现在我想创建一个 numpy 数组 其中包含n的副本a其尺寸如下 n 3 128 192 是否存在一个 numpy 函数可以在不使用循环指令的情况下帮助我解决这个问题 只需使
  • 在 iPhone 中的 Facebook 上分享捆绑包中的图像和链接

    我想从我的 iPhone 应用程序分享图像 链接等到 Facebook 我的应用程序链接 位置 名称和描述已成功发布 但我无法分享图像 请按照我的代码 UIImage image UIImage imageNamed sample png
  • 在asp.net中使用Http模块配置ETag

    我正在通过 seo 优化和 yslow 来优化我们公司的网站 但在 yslow 中 ETAGS 是 F 我浏览了数十个网站和教程 最好的选择是使用 HTTP 模块 我已经这样做并尝试了几个模块 但没有显示结果 也许语法中的某些内容是错误的
  • 对对象数组中相似的键求和

    我有一个如下所示的对象数组 name P1 value 150 name P1 value 150 name P2 value 200 name P3 value 450 我需要将同名对象的所有值相加 可能还有其他数学运算 例如计算平均值
  • FasterCSV:几个分隔符

    我的 Rails3 应用程序解析用户上传的 CSV 文件 正如预期的那样 用户上传制表符分隔和逗号分隔的文件 我想两者都支持 My code input CSV read uploaded io tempfile encoding UTF
  • 输入文本区域和输出文本区域并保存到

    我编写了一个快速 hta 以便通过按钮进行快速操作 复制到剪贴板 消息框并运行特定文件 现在我正在尝试弄清楚如何添加 2个文本框 TextArea1 在里面输入文本 提交按钮将textarea1保存到本地文件并加载到textarea2 Te
  • 有条件地设置 pandas 数据框列值

    这个问题与下面的请求完全相同 但又多了一个转折 Pandas 替换数据框中的列值 pandas 数据框列中值的条件替换 所以 我想设置或有条件地设置 pandas 数据框列值 增加的复杂性是 不是使用字符串常量来寻址数据帧列 df data
  • 在不同的工作簿中捕捉事件

    我想知道是否可以在另一个工作簿中捕捉事件 宏将打开一个工作簿供用户使用 我希望能够在其选择更改事件上运行另一个宏 不可以 代码不能存储在刚刚打开的工作簿中 除了以编程方式将代码添加到打开的工作簿中之外 还有其他方法吗 ThisWorkboo
  • 从表行发布数据,如 json 格式

    这与我上次有关question 注意 我已经在那里得到了一些很好的答案 我正在做一个可以过滤的程序 我没有包含这个问题 因为我认为只要我知道如何从行中获取数据 添加文本就更容易 但令我沮丧的是 到目前为止我还无法编写出一个好的程序 我目前使
  • 如何组合对一个函数的多次调用?

    我想概括我的函数调用 以便能够将这些调用作为参数传递给第二个函数 就我而言 我有多个 ggplots 我将其存储为列表 例如 year plots lt lapply c 2008 2009 2010 2011 2012 2013 2014
  • 将类静态成员定义放入 cpp 文件 - 技术限制?

    当用 C 编码时 我 最喜欢 的烦恼之一是在我的类中声明一些静态变量 然后查看有关未解析的静态变量的编译错误 在早期 我总是害怕它意味着什么 我的意思是经典的例子 比如 Test h class Test private static in