【问题标题】:Returning NULL pointer, invalid conversion from 'long int' to 'Object*'返回 NULL 指针,从 'long int' 到 'Object*' 的无效转换
【发布时间】:2016-08-03 15:54:19
【问题描述】:

我的问题似乎有点类似于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)

【问题讨论】:

  • 您是否有特定的理由在 c++11 后代码中使用 NULL 而不是 nullptr?此外,gcc 4.4.7 非常旧了,我建议你升级你的编译器,因为该代码在现代编译器上完美运行:coliru.stacked-crooked.com/a/a01d03ae16e6c3bf
  • 这可能是一个错误。 FWIW 如果你使用 C++11,你应该使用nullptr
  • 我承认我对nullptr一无所知。该代码最初不是为 C++11 编写的,但我已经更改了它的另一部分以包含一个需要 C++11 的库。
  • @Fatih BAKIR,我在使用较新的 gcc 版本时遇到了此代码的其他问题。我不是作者。

标签: c++ gcc


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多