拥有 constexpr 静态字符串会导致链接器错误

2024-02-05

以下程序给我一个链接时错误:

#include <iostream>

struct Test { static constexpr char text[] = "Text"; };

int main()
{
    std::cout << Test::text << std::endl; // error: undefined reference to `Test::text'
}

错误信息是

/tmp/main-35f287.o: In function `main':
main.cpp:(.text+0x4): undefined reference to `Test::text'
main.cpp:(.text+0x13): undefined reference to `Test::text'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

好的。让我们尝试解决这个问题:我在struct body:

#include <iostream>

struct Test { static constexpr char text[] = "Text"; };
constexpr char Test::text[] = "Text";

int main()
{
    std::cout << Test::text << std::endl;
}

Clang 给我以下错误消息。

main.cpp:4:35: error: static data member 'text' already has an initializer
    constexpr char Test::text[] = "Text";
                                  ^
main.cpp:3:50: note: previous initialization is here
    struct Test { static constexpr char text[] = "Text"; };

哦,好吧,我想,现在我知道你想要什么了:

#include <iostream>

struct Test { static constexpr char text[]; };
constexpr char Test::text[] = "Text";

int main()
{
    std::cout << Test::text << std::endl;
}

又报错了:

main.cpp:3:41: error: declaration of constexpr static data member 'text' requires an initializer
    struct Test { static constexpr char text[]; };

狗在那里咬了自己的尾巴。 :(

有没有办法使用在类内部声明的编译时常量字符数组?我想要类中的数据的原因是我需要一个类型特征类来帮助我做模板的事情。


应该管用:

#include <iostream>

struct Test { static constexpr char text[] = "Text"; };
constexpr char Test::text[];

int main()
{
    std::cout << Test::text << std::endl;
}

在标准 (n4140 §9.4.2/3) 中,您可以找到:

可以在类中声明文字类型的静态数据成员 使用 constexpr 说明符定义;如果是这样,其声明应 指定一个大括号或等于初始化器,其中每个初始化器子句 即赋值表达式是常量表达式。 [注:在 在这两种情况下,成员都可能出现在常量表达式中。 -结尾 笔记 ]如果成员是,则仍应在命名空间范围内定义 程序中使用的 odr-used (3.2) 和命名空间范围定义应 不包含初始化程序.

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

拥有 constexpr 静态字符串会导致链接器错误 的相关文章

  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • 在 OnModelCreating 期间设置列名称

    Issue 我目前正在尝试通过设置的属性为我的表及其列添加前缀 我正在使用实体框架核心 我已经正确地为表名添加了前缀 但我似乎无法弄清楚列的前缀 我有一种感觉 我需要使用反射 我已经留下了我的 可能很糟糕的 反思尝试 有人有办法在实体中设置
  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 为什么'enable_if'不能用于禁用这里声明

    include
  • 将表(行)与 OpenXML SDK 2.5 保持在一起

    我想在 Word 文档中生成多个表 每行 2 行 但我想将这两行保留在一起 如果可能的话 new KeepNext 第一行不起作用 new KeepNext 第一行的最后一段不起作用 new CantSplit 放在桌子上不起作用 在所有情
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 如何在三个 IEnumerable 上使用 Zip [重复]

    这个问题在这里已经有答案了 可能的重复 使用 Linq 从 3 个集合创建项目 https stackoverflow com questions 5284315 create items from 3 collections using
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T

随机推荐

  • 提前预取奇怪的行为

    我正在使用 Twitter 的 typeahead 的一个非常基本的设置 我有两个不同的搜索字段 因此有两个预输入初始化 JavaScript document ready function input search event typea
  • 如何使用 JavaScript 用一个 if 检查数组中的多个元素?

    我的数组中有 1 个或多个项目 对于这个例子 假设它们是 65 66 67 如何 如果可能的话 只执行一个 if 条件来检查匹配 例如 var keyArray 65 66 67 if e keyCode any item in keyAr
  • Hive 数据存储在哪里?

    我对配置单元存储数据的位置有点困惑 它将数据存储在 HDFS 还是 RDBMS 中 Hive Meta 存储是否使用 RDBMS 来存储 Hive 表元数据 提前致谢 Hive 数据存储在其中之一Hadoop 兼容文件系统 https cw
  • ViewPager 内部片段问题

    我在查看某些片段内部的寻呼机时遇到问题 为了使用视图寻呼机 我使用 FragmentPagerAdapter 当然我得到了java lang IllegalStateException 递归进入executePendingTransacti
  • 更改淘汰赛绑定的应用顺序

    我正在创建一个 Knockout 绑定 它将作为 jQuery 小部件的包装器 该小部件将事件处理程序应用于子元素 不幸的是 小部件的事件处理直接应用于子元素 而不是委托 问题是我有一个foreach绑定在同一元素上 但我需要应用自定义绑定
  • mySQL 中的 NOT DISTINCT 查询

    我被要求在一个简单的员工数据库列上为此创建一个查询 包括 ninumber 名字 姓氏 地址 SuperVisorNiNumber 员工和主管都保存在同一张表中 并通过他们的编号进行引用 我被要求构建的查询是 v 查找员工的 NI 号码 员
  • 如果给函数一个列表,则自动使用列表理解/map() 递归

    作为一名 Mathematica 用户 我喜欢自动 遍历列表 的函数 Mathematica 人们称之为 请参阅http reference wolfram com mathematica ref Listable html http re
  • 如何使用OCR(TesseractOCR)php库

    我使用此链接克隆了 OCR 的 git 库 git clone git github com thiagoalessio tesseract ocr for php git 然后我只需按照以下步骤包含所需的文件example http th
  • 在 SQL Server 中添加两个列值来填充第三列,这可以在没有触发器/存储过程的情况下完成吗?

    对此我有一个非常具体的问题 我知道我可以使用SUM然而 为了对两列的值求和 除了运行基本查询之外 还需要处理一些其他要求 表中需要存在第三列 其中将包含两列的值 每当创建行或更新其他列中的两个值中的任何一个时 都需要更新第三列 是否可以通过
  • javafx快照不显示应用程序或场景

    您好 我正在使用 JavaFx WebView 创建 HTML 页面的屏幕截图 它工作正常 但我想知道是否可以在不启动图形 Windows 中的应用程序的情况下执行此操作 我的意思是没有比这更轻量级的方法来获取屏幕截图 public cla
  • Javascript .innerHTML 但不包括内部 div

    考虑到我有这个div div class ResCheckIn div class ResDtlLabel Check in div Thursday October 18 2018 div 我只是想获取字符串 Thursday Octob
  • 调用本机函数“ISNULL”时参数计数不正确

    我有一个查询试图从 MS SQL Server 2008 转换为 MySQL 它在 MSSQL 上运行良好 我收到错误 Incorrect parameter count in the call to native function ISN
  • 为什么我不能 mmap /proc/self/maps?

    具体来说 为什么我可以这样做 FILE fp fopen proc self maps r char buf 513 buf 512 NULL while fgets buf 512 fp gt NULL printf s buf 但不是这
  • 应用程序线程与服务线程

    将冗长的网络访问代码放置在活动的线程或服务的线程中有何优点 缺点 对申请有何影响 我正在编写一个流音频播放器 从我到目前为止所读到的内容来看 将代码放入服务中仍然会最终阻塞应用程序 因此需要一个新线程 有谁知道放置这段代码是否更有意义在一项
  • React 中的异步 xmlhttprequest

    我正在尝试在react中实现异步XMLHttpRequest 这是我的尝试 var xhr new XMLHttpRequest var json obj status false xhr open GET https jsonplaceh
  • 通过 SQL 更新单个记录并获取已更新记录的 id 的最佳方法是什么? (Java/MSSQL)

    我知道我可以像这样更新单个记录 但如何才能访问已更新记录的 id 呢 我使用的是 MSSQL 所以不能使用 Oracle RowId update myTable set myCol foo where itemId in select t
  • Erlang课程并发练习:我的答案可以改进吗?

    我正在做这个练习erlang org 课程 http www erlang org course exercises html conc 2 编写一个以N开头的函数 在环中处理 并发送 围绕所有消息 M 次 环中的进程 之后 消息已发送至进
  • 使用 IAM 授权从 EC2 访问 AWS API Gateway (NodeJS)

    也许我要走一座桥到很远的地方 但这就是我得到的 为授权设置了 AWS IAM 的 AWS API Gateway 方法 允许访问该方法的策略 附加了该策略的 EC2 角色 具有该角色的 EC2 已启动 我希望 EC2 上的 NodeJS 程
  • 共享 Facebook API ID 和密钥安全吗?

    我正在开发一个与 Facebook 通信的基于网络的开源应用程序 其中一个文件包含 Facebook API ID 和密钥 与世界其他地方分享这些信息可以吗 非常重要的是 您never分享您的应用秘密 您的应用程序 ID 完全不重要 任何访
  • 拥有 constexpr 静态字符串会导致链接器错误

    以下程序给我一个链接时错误 include