2016-11-12 2 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 - никогда не использовать NULL в современном C++.


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: что вы пытаетесь сделать? Похоже, вам нужен 'template' –

0

В C++ NULL обычно определяется как интеграл постоянной, равной нулю. Это C, где NULL определяется как (void *)0. Таким образом, если вы хотите использовать auto вы должны написать

auto * generator = (void *)0; 

В противном случае вы должны явно указать тип указателя и использовать nullptr. Например

void * generator = nullptr; 
Смежные вопросы