自动指针= NULL错误

时间:2016-11-12 21:35:27

标签: c++ c++11 pointers auto

我收到了编译错误:

error: unable to deduce ‘auto*’ from ‘0l’

尝试编译我的代码时:

random_device rd;
minstd_rand gen0(rd());
knuth_b gen1(rd());
ranlux24_base gen2(rd());

auto * generator = NULL; // error

switch(generatortmp) {
    case 0: generator = &gen0;
    more cases...
}

如何解决此问题?

2 个答案:

答案 0 :(得分:5)

无法推导出指针的类型,因为NULL不包含有关指向元素类型的信息。 您需要明确指定类型

type* generator = nullptr;

此外,您应该使用nullptr - 永远不要在现代C ++中使用NULL

  

我正在尝试将此指针用于生成随机数。我希望它能够做(* generator)()

之类的事情

您可以使用模板的功能方法:

template <typename TGenerator>
auto with_generator(TGenerator& generator)
{
    // use generator
}

switch(generatortmp) 
{
    case 0: with_generator(gen0); break;
    case 1: with_generator(gen1); break;
    // l...
}

答案 1 :(得分:0)

在C ++中,NULL通常被定义为等于零的整数常量。它是C,NULL定义为( void * )0。因此,如果你想使用auto,你必须写

auto * generator = ( void * )0;

否则,您应该明确指定指针的类型并使用nullptr。例如

void * generator = nullptr;