Вопрос

Я всегда думал, что случайные функции в CSTDLIB были только Rand и Srand, но следующие работы (скомпилированные с G ++ на Ubuntu 10.10)?

Я на самом деле обнаружил это при переходе из Windows в Ubuntu, моя компиляция не удалась, так как она была неоднозначно перегрузкой (я объявил мою собственную «случайную ()» функцию).

#include <cstdlib>
#include <iostream>

using namespace std;

int main() {
 srandom(50);
 cout << random();
 return 0;
};

Также на Ubuntu правильно следующие компилирования, оно появляется после проверки STDLIB.h, что случайное () и Srandom (), среди прочего, не объявляются в пространстве имен STD. Что делает его полной болью в заднице ...

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << random();
    return 0;
};
Это было полезно?

Решение

Поскольку авторы для компилятора могут свободно добавлять дополнительные вещи в языковую библиотеку, чтобы облегчить вашу работу. Обычно это не было бы проблемой, потому что она ставит их в пространство имен, которое вы не будете добавлять вещи, std.

Ваша проблема возникает из этой маленькой линии

using namespace std;

Это тянет все от std в пространство имен вашей программы, в том числе std::random, который восполщители компилятора полезно предоставили. Если вы вместо этого явно заявляете, что вы тянете из std, вы бы не будете сбивать твой местные random с std::random:

using std::rand;
using std::srand;

Смотрите также этот вопрос от FAQ C ++ Lite.

Другие советы

random() является частью Одиночная спецификация Unix. Отказ Это не часть стандарта C ++. Вот почему это не в Windows, но находится на большинстве Unix / Mac платформ.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top