拥有 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 静态字符串会导致链接器错误 的相关文章

  • 从 Invoke 方法获取 RETURN

    我正在尝试从另一个线程上的列表框项目中读取值 我尝试创建一种新方法来运行调用命令 我可以设法将命令发送到列表框 例如通过调用方法添加 但我似乎无法得到响应 我似乎无法获取该项目的值 我尝试了几种方法 一旦我将它从空变为字符串 事情就开始变得
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 如何使用 C# 以编程方式编辑 Power BI Desktop 文档参数或数据源?

    我有一个在 Power BI Desktop 中内置的报告模板 并保存为 pbix 或 pbit 文件 该模板使用DirectQuery SQL数据库作为数据源 而服务器地址和数据库名称被提取到参数中 还有一个参数包含一个ReportId
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • make_shared<>() 中的 WKWYL 优化是否会给某些多线程应用程序带来惩罚?

    前几天我偶然看到这个非常有趣的演示 http channel9 msdn com Events GoingNative GoingNative 2012 STL11 Magic Secrets作者 Stephan T Lavavej 其中提
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • 拆分/标记化/扫描字符串并注意引号

    Java中是否有默认 简单的方法来分割字符串 但要注意引号或其他符号 例如 给定以下文本 There s a man that live next door in my neighborhood and he gets me down Ob
  • 判断串口是普通COM还是SPP

    我正在寻找一种方法来确定 COM 是标准 COM 还是 SPP COM 也称为 COM 设备的电缆替换蓝牙适配器 我有一个可以在 USB COM gt USB 和蓝牙下工作的设备 并且蓝牙接口可以与 SPP 一起工作 我目前正在使用Syst
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 如果在代码中添加元素,“FindName”将不起作用

    在 WPF 应用程序中 如果在 XAML 中声明 ContentControl
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 初始化列表在 VC10 中不起作用

    我在 VC 2010 中编写了这个程序 class class1 public class1 initializer list
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • 提前预取奇怪的行为

    我正在使用 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