2016-08-15 8 views
2

Я пытаюсь скомпилировать код, директив #includes библиотекиКомпиляция с ICPC - с помощью библиотеки

В коде у меня есть следующие строки:

int main() 
{ 
    clock_t begin = clock(); 
    random_device rd; 
    mt19937 gen(rd()); 
    uniform_real_distribution<> U(0,1); 
    default_random_engine generator; 
    rr1=U(gen); 
} 

Когда я компилирую с помощью следующей строки:

icpc -std=c++0x -std=c++11 -o main main.cpp -O3 

я получаю следующие ошибки:

main.cpp(152): error: identifier "uniform_real_distribution" is undefined uniform_real_distribution<> U(0,1); ^

main.cpp(152): error: expected an expression uniform_real_distribution<> U(0,1); ^

main.cpp(368): error: identifier "default_random_engine" is undefined default_random_engine generator; ^

main.cpp(441): error: identifier "U" is undefined rr1=U(gen); // first random number for time interval

main.cpp(509): warning #1595: non-POD (Plain Old Data) class type passed through ellipsis rr1=U(gen);

любая идея, как решить эту проблему?

+1

Попробуйте 'std :: uniform_real_distribution' и попробуйте использовать соответствующую версию' icpc'. ссылка https://software.intel.com/en-us/forums/intel-c-compiler/topic/474159 –

ответ

0

Эта проблема вызвана компилятором Intel. Версия icpc не полностью поддерживает C++ 11, которая на самом деле является C++ 0x.

Это означает, что:

  • Вам необходимо обновить компилятор вашей компании Intel для поддержки uniform_real_distribution.
  • Или использовать некоторые библиотеки, такие как boost, PCG и т.д.
  • Или еще с помощью C++ 11 пути, но без uniform_real_distribution. Например, непосредственно используйте mt19937, mt19937_64 или любой другой псевдослучайный генератор.
  • Или использовать не-C++ 11-way i.e. rand() или rand_r() для нецелевого использования.

Я думаю, вышеуказанная часть ответила на ваш вопрос.


Хотите узнать больше?

Для пользователей Intel, вы можете проверить совместимость компилятора на первом и перевести номер версии МОГО в номер версии Родственника же сам GCC, а затем проверить с c++0x/c++11 supported list

Для пользователей GNU, вы можете проверить совместимость компилятора напрямую от c++0x/c++11 supported list

, например, вы можете $icpc -v вы можете получить что-то вроде icpc version a.b.c (gcc version x.y.z compatibility) Это означает, что версия вашего компилятора Inter является а и ее ком Патентоспособность - это gcc-версия x.y.z.

А начиная с uniform_real_distribution is не поддерживается до GCC 4.4.5? (GCC 4.4.7 является подтвержденной поддержкой)

Тогда, если ваш x.y.z более поздний, чем 4.4.5? (Обязательно 4.4.7), вы можете использовать семейства функций «uniform_xxx_distribution» без проблем совместимости.