2015-10-26 2 views
0

Я не совсем понимаю, эта ошибка g++ бросает на меня.неизвестное преобразование для аргумента из 'std :: exponential_distribution <double> (*) (double)' to 'std :: exponential_distribution <double> *'

В чем разница между std::exponential_distribution<double> (*)(double) и std::exponential_distribution<double>*?

Второй, очевидно, является указателем на std::exponential_distribution с аргументом шаблона <double>, но что является первым?

Вот код, который вызывает проблему:

Во-первых, функция прототипа

simulation(std::mt19937_64 *mt19937_64_pointer, 
      std::uniform_real_distribution<double> *uniform_real_dis_p, 
      std::exponential_distribution<double> *exp_dis_p) 
{ 
    ... 
} 

И код, который вызывает эту функцию:

std::mt19937_64 *gen_p = nullptr; // <-- this used to be: *&gen_p - hence the problem 
    // Actually it isn't equal to nullptr - this is set elsewhere in the code 

std::uniform_real_distribution<double> uniform_real_dis(0.0, 1.0); 
std::exponential_distribution<double> exp_dis(1.0); 

simulation s(gen_p, &uniform_real_dis, &exp_dis); 

Это немного странно ошибка - я уверен, что смогу это исправить, если полностью пойму, что это значит. Мне кажется странным, что равномерное распределение работает, а экспоненциальное - нет?

+0

не должно быть 'std :: mt19937_64 * gen_p'? [this compiles] (http://melpon.org/wandbox/permlink/DG17fzRlmKLjoOpF) –

+0

Странно, почему компиляция и мой нет. – user3728501

+0

Я удалил '&', вы уверены, что хотите как '*', так и '&'? –

ответ

1

У вас есть ответ с комментариями, но только для записи, std::exponential_distribution<double> (*)(double) - это тип указателя функции: функция принимает один double и возвращает std::exponential_distribution<double>.

 Смежные вопросы

  • Нет связанных вопросов^_^