2016-11-12 92 views
-1

我得到一个编译错误:自动指针= NULL错误

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

'汽车发电机= nullptr;' – SomeWittyUsername

回答

5

指针的类型不能被推断,因为NULL不包含关于指向元素类型的信息。 您需要明确指定类型

type* generator = nullptr; 

此外,你应该使用nullptr - 从来没有在现代C使用NULL ++。


I'm trying to have this pointer be used to generate random numbers. I want it to be able to do something like (*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... 
} 
+2

你可能已经编辑好对方的回答,但哦:) – Rakete1111

+0

因为这取决于是真实的情况下,我不能指定类型。 –

+0

@JackNewman:你想做什么?听起来像你需要一个'模板' –

0

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

auto * generator = (void *)0; 

否则,你应该明确地指定指针的类型和使用nullptr。例如

void * generator = nullptr;