c++ - 返回 NULL 指针,从 'long int' 到 'Object*' 的无效转换

标签 c++ gcc

我的问题似乎有点类似于 Conversion from null-integer to pointer in comma list

这是一个简单的例子

#include <utility>

struct Object {
  double foo;
};

std::pair<Object*,int> test_function() {
  typedef std::pair<Object*,int>  pair_t;
  return pair_t(NULL, 2);
}
// test.cc

对于 gcc 4.4.7,g++ -std=c++0x -c test.cc -o test.o 失败

/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:90: error: invalid conversion from \u2018long int\u2019 to \u2018Object*

如果我省略 -std=c++0x,它会编译。另外,如果我使用较新版本的 gcc,则编译没问题。代码有什么问题吗?人们应该期望 gcc 版本有这样的差异吗?

后来的编辑:我也可以返回 pair_t((Object*)NULL, 2)

最佳答案

我相信您的问题的答案就在这里:

C++ can't initialize a pointer in a pair to NULL

NULL 由 gcc 表示为 long,如果没有显式转换,它不能转换为 Object* 类型。

关于c++ - 返回 NULL 指针,从 'long int' 到 'Object*' 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38748394/

相关文章:

c# - 将 C# 可变长度结构写入二进制并在 C++ 中读取?

c++ - 为将尝试使用的对象返回 NULL? (获取核心转储——C++ 新手)

c++ - G++ 让我调用未定义的方法

c - 为什么 strerror_r 在使用 gnu90 和 c90 标准编译时表现不同?

c++ - 普通 C++ 代码如何应用于 GUI 编程?

java - 回调 SWIG 类 C++ 到 Java

c++ - 在 Irrlicht 中移动和旋转 SceneNode(Sphere)

ruby - Xcode - 配置 : error: no acceptable C compiler found in $PATH

gcc - 如何检查 gcc 是否正在执行尾递归优化?

c++ - gcc 是否有 pragma 来定义文件类型/编译器?