У меня возникла проблема с написанием простого генератора случайных чисел с использованием стандарта и в Microsoft Visual Studio 2013. Когда я пытаюсь скомпилировать, он выдает кучу ошибок, связанных с файлом xutility. У меня была куча похожих ошибок, когда я пытался использовать библиотеки BOOST для выполнения того же самого, так что это МОЖЕТ быть проблемой с MSVC.
#include <iostream>
#include <chrono>
#include <random>
using std::cout;
using std::endl;
auto seed = std::chrono::high_resolution_clock::now();
int main()
{
std::uniform_int_distribution<> randNum(1, 6);
cout << randNum(seed) << endl;
return 0;
}
Вот ошибки, которые он выдает:
Ошибка 1 ошибка C2039: 'result_type': не является членом 'std :: chrono :: time_point' e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3256
Ошибка 2, ошибка C2146: синтаксическая ошибка: отсутствует ';' перед идентификатором '_Ty1' e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3256
Ошибка 3 ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание: C ++ не поддерживает default-int e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3256
Ошибка 4 ошибка C2065: '_Ty1': необъявленный идентификатор e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3258
Ошибка 5, ошибка C2070: 'unknown-type': недопустимый размер операнда e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3258
Ошибка 6 ошибка C2065: '_Ty1': необъявленный идентификатор e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3259
Ошибка 7, ошибка C2923: 'std :: _ If': '_Ty1' не является допустимым аргументом типа шаблона для параметра '_Ty2' e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3259
Ошибка 8, ошибка C2955: 'std :: _ If': для использования шаблона класса требуется список аргументов шаблона e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ xutility 3259
Вот фрагмент кода из xutility, который, похоже, вызывает проблемы:
// TEMPLATE CLASS _Rng_from_urng
template<class _Diff, class _Urng>
class _Rng_from_urng
{ // wrap a URNG as an RNG
public:
typedef typename make_unsigned<_Diff>::type _Ty0;
typedef typename _Urng::result_type _Ty1;
typedef typename _If<sizeof (_Ty1) < sizeof (_Ty0),
_Ty0, _Ty1>::type _Udiff;
После этого момента у класса есть НАМНОГО больше кода, но ошибки происходят в последних двух строках.
Между прочим, я потратил несколько часов, выполняя различные запросы, чтобы попытаться найти ответ, прежде чем опубликовать здесь, без каких-либо полезных результатов, хотя это могло легко быть недостатком с моей стороны.
Спасибо!
С помощью Себастиона все предыдущие ошибки были устранены, однако возникла новая ошибка:
Измененный код:
std::default_random_engine engine(seed);
cout << randNum(engine) << endl;
Ошибка:
Ошибка 1 ошибка C2039: 'generate': не является членом 'std :: chrono :: time_point' e: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ random 1618