2016-11-12 72 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;