编译错误“nullptr”未声明的标识符

2024-01-06

我正在尝试使用 Visual Studio 2008 Express 编译源代码,但收到此错误:

Error C2065: 'nullptr' undeclared identifier.

My code:

if (Data == nullptr) {
    show("Data is null");
    return 0;
}

我在 Google 上看到我应该升级到 Visual Studio 2010,但由于 Visual Studio 2008 中的 IntelliSense,我不想这样做。这可以修复或替换吗?


您收到的错误是因为编译器无法识别nullptr关键词。这是因为nullptr是在比您正在使用的版本更高版本的 Visual Studio 中引入的。

您可以通过两种方法让它在旧版本中运行。一个想法来自 Scott Meyers c++ 书,他建议使用一个模拟类创建一个标头nullptr像这样:

const // It is a const object...
class nullptr_t 
{
  public:
    template<class T>
    inline operator T*() const // convertible to any type of null non-member pointer...
    { return 0; }

    template<class C, class T>
    inline operator T C::*() const   // or any type of null member pointer...
    { return 0; }

  private:
    void operator&() const;  // Can't take address of nullptr

} nullptr = {};

这样你只需要根据msvc的版本有条件地包含该文件

#if _MSC_VER < 1600 //MSVC version <8
     #include "nullptr_emulation.h"
#endif

这样做的优点是使用相同的关键字,并使升级到新的编译器变得更加容易(如果可以的话,请升级)。如果您现在使用较新的编译器进行编译,那么您的自定义代码根本不会被使用,并且您仅使用 c++ 语言,我觉得这对于未来很重要。

如果您不想采用这种方法,您可以使用模拟旧 C 风格方法的方法(#define NULL ((void *)0))在那里你为NULL像这样:

#define NULL 0

if(data == NULL){
}

请注意,这与NULL如 C 中所示,有关更多讨论,请参阅此问题:为什么 C 和 C++ 中 NULL 指针的定义不同? https://stackoverflow.com/questions/7016861/why-are-null-pointers-defined-differently-in-c-and-c

这样做的缺点是您必须更改源代码,并且它不像nullptr。因此请谨慎使用,如果你不小心,它可能会引入一些微妙的错误,正是这些微妙的错误推动了开发nullptr首先。

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

编译错误“nullptr”未声明的标识符 的相关文章

  • Python 的 pack("

    我不太了解 python 但从文档中可以看出代码 str AAAA str pack
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • 为什么我在 WinForms 列表框中得到“System.Data.DataRowView”而不是实际值?

    每当我运行代码并尝试查看highscore我在列表框中得到的只是System Data DataRowView 谁能明白为什么吗 Code MySqlConnection myConn new MySqlConnection connStr
  • 原子的 C++ 内存屏障

    在这方面我是个新手 谁能提供以下内存屏障之间差异的简化解释 窗户MemoryBarrier 围栏 mm mfence 内联汇编asm volatile memory 内在的 ReadWriteBarrier 如果没有简单的解释 一些好文章或
  • 禁用实体框架的默认值生成(Code First)

    我数据库中有一个列不能为空 我想将其设置为默认值在数据库中 问题是实体框架似乎自己创建了一个默认值 例如 int gt 0 并且完全忽略了数据库中的默认值约束 有没有办法禁用实体框架的默认值 我发现您可以使用以下属性来装饰您的字段 Data
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 使用联合对 IP 地址进行多种解释?

    在工作中 我们使用以下构造来将 IP 地址解释为 4 字节数组或 32 位整数 union IPv4 std uint32 t ip std uint8 t data 4 这很好用 但是读完这本书的第 97 章 不要使用联合来重新解释表示
  • 模板定义中的友元函数

    我的问题有点相关this https stackoverflow com questions 1297609 overloading friend operator for template class one 我想重载某些类的运算符 te
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 使用方法的状态模式

    我正在尝试使用方法作为状态而不是类来基于状态模式的修改版本来实现一个简单的状态机 如下所示 private Action

随机推荐

  • AWS 证书管理器 api 不显示导入的证书

    虽然证书管理器 UI 显示我导入的证书状态为 已颁发 但当尝试从 ELB 应用程序 lb 使用它时 我得到 没有可用的证书 对 api 的 POST 请求返回空列表 另外 当我运行 aws acm list certificates max
  • 维护 .NET 项目中引用的 COM dll 的正确版本

    我想在 NET 项目中引用 COM DLL 但我还想确保创建的互操作 DLL 具有正确的版本 以便补丁知道何时必须更改 DLL 如果我使用TlbImp我可以用以下命令指定所需的版本 asmversion标志 但当我直接从 Visual St
  • 如何在反应头盔中预加载最大内容的绘画图像

    我在灯塔收到这个警告 我尝试做 了解更多 链接告诉我要做的事情 并在图像的头部包含一个预加载标签 但我仍然收到警告 我尝试了这个预加载标签 该网址是当我右键单击图像并选择 在新选项卡中打开 时浏览器中的网址 图像刚刚导入到 jsx 组件中
  • Python csv writer 分隔符错误?

    免责声明 我在欧洲 根据这一页 http www paessler com knowledgebase en topic 2293 i have trouble opening csv files with microsoft excel
  • SimpleForm 不带 for(非模型表单)

    是否可以在没有模型的情况下使用简单表单 由 Plataformatec 提供 https github com plataformatec simple form https github com plataformatec simple
  • Xcode 静态分析器抱怨使用 ARC 时存在潜在泄漏

    我正在使用 ARC 和 ios sdk 6 0 我很确定我有一些内存泄漏 我很难追踪到 运行静态分析器后 我收到有关以下两种方法的警告 id
  • 在 Visual Studio 中调暗/隐藏代码日志行

    有什么方法可以使 Visual Studio 变暗或隐藏 显示我的代码的按需日志记录行 我们在项目中使用了大量的日志记录 并且很难阅读这样的代码 我希望它是这样的 例如 Unobtrusive Code 扩展对我来说适用于 Visual S
  • 是否可以通过编程方式禁用 iOS 7 中的控制中心?如果不能,有哪些替代方法?

    我开发了一个使用自下而上滑动手势的应用程序 它在 iOS 6 中工作得很好 但现在 iOS 7 出来了 它可能工作了二十五次之一 我几乎每次都会得到 iOS 7 控制中心 显然 可以在 设置 中禁用控制中心 但这取决于手机所有者 我无法控制
  • Python 中的“变量 //= 值”语法是什么意思? [复制]

    这个问题在这里已经有答案了 我遇到了代码语法d 2其中 d 是变量 这不是任何循环的一部分 我不太明白这个表达 有人可以启发我吗 是楼层划分操作员 这 旁边的意思是 就地 对变量进行操作 它类似于 and 运算符 如果您以前见过这些运算符
  • Python-算法语句

    我想编写一个执行以下操作的程序 输入示例 3 10 4 18 2 6 19 24 1 20 预期输出 4 2 2 2 6 1 1 输入将来自一个文件 其中第一行将包含窗口大小 N 第二行将包含由空格分隔的数字流 您需要输出每个窗口中以空格分
  • Jquery Datatable 将一行从一个表拖放到另一个表

    我正在使用 jquery dataTables js 并且尝试将行从一个表拖放到另一个表 反之亦然 从表 2 拖放到表 1 如下示例所示 http jsfiddle net yf47u http jsfiddle net yf47u 上面的
  • jenkins Slave 以用户身份运行

    我有一个詹金斯设置 有多个用户登录活动目录插件 http www greenreedtech com jenkins active directory 这很有用 这样每个用户都可以访问自己的任务 然而 每个用户在本地网络上也有不同的权限 例
  • 我可以传递前向声明的枚举值吗?

    当向前传递声明的结构或类时 必须通过引用或指针将其传递给函数 但是 前向声明的枚举可以做什么呢 它是否还必须通过引用或指针传递 或者说 可以传递一个值吗 下一个示例使用 g 4 6 1 编译良好 include
  • 从“Android 私人库”中删除灰显的项目。无法删除罐子

    我有一个 Eclipse 项目 我正在尝试将库更新为较新的 Jar 文件 但是 Eclipse 项目不允许我删除旧的库 我关闭了 eclipse 并尝试从文件夹中手动删除它并重新启动 eclipse 但它仍然不允许我现在编译 因为旧的 ja
  • 将 dd-mm-yyyy 字符串转换为日期

    我正在尝试使用以下命令将 dd mm yyyy 格式的字符串转换为 JavaScript 中的日期对象 var from datepicker val var to datepickertwo val var f new Date from
  • 如何使用 LanguageExt EitherAsync 返回 Left 的非错误类型?

    我有一个方法 可以在数据库中查找会员卡 如果找到并且有效则返回它 或者返回enum值 如果没有 这允许调用代码打开enum价值 我想退货Either
  • 如何获取SKSpriteNode名称?

    我正在使用我找到的代码并尝试找出如何获取我的对象的节点名称 这是代码的一部分 let sprite1 SKSpriteNode color UIColor redColor size CGSize width 30 height 30 le
  • Gradle - 无法获取配置容器的未知属性“scm”

    Execution failed for task app iterateDeclaredDependencies gt Could not get unknown property scm for configuration contai
  • W/PicturePileLayerContent:警告:在没有内容的情况下绘制 PicturePile

    我在 logcat 中收到此警告 我在网上搜索但没有得到原因是什么或我应该如何处理 这说明什么 这是 logcat logcat 中没有其他不寻常的地方 02 23 15 17 52 190 29817 30304 com astrolab
  • 编译错误“nullptr”未声明的标识符

    我正在尝试使用 Visual Studio 2008 Express 编译源代码 但收到此错误 Error C2065 nullptr undeclared identifier My code if Data nullptr show D