我收到了编译错误:
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...
}
如何解决此问题?
答案 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;