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

时间:2016-08-03 15:54:20

标签: 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:错误:从\ u2018long int \ u2019到\ u2018Object *

的无效转换

如果省略-std=c++0x,它会编译。另外,如果我使用更新版本的gcc,编译就可以了。代码有什么问题吗?人们应该期待gcc版本的这种差异吗?

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

1 个答案:

答案 0 :(得分:2)

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

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

NULL由gcc表示为long,如果没有显式强制转换,则无法将其转换为Object *类型。