srand(time(NULL)) "Функция 'srand' не может быть решена."

Я пытался отладить эту проблему некоторое время и, честно говоря, я просто не вижу, что я делаю неправильно.

Почему есть синтаксическая ошибка?

#include <iostream>;
#include <time.h>;
#include <stdio.h>;
#include <stdlib.h>;
using namespace std;


class Problem3 {
    public:
        bool isPrime(long double num) {
            srand(time(NULL));
            return 0;
        }
};

Я получаю ошибку,

"Функция" srand "не может быть решена".

  • Теперь я хорошо понимаю, что мне не нужны точки с запятой после операторов включения
  • Я использую Eclipse CDT вместе с MinGW в качестве моего компилятора

Как я решил проблему:

Это было связано с компилятором MinGW, который я использовал. Переход на Visual Studio решил проблему.

3 ответа

Решение

; в конце #include Директивы являются проблемой в вашем коде. #include Директивы не нуждаются (неправильно ставить) точки с запятой в конце, в отличие C++ заявления.

[Warning] extra tokens at end of #include directive [enabled by default] 

Кажется, любой персонаж после > в директиве вызывает эту ошибку / предупреждение.

          #include<iostream>a   //error

Изменить на это:

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;


class Problem3 {
    public:
        bool isPrime(long double num) {
            srand(time(NULL));
            return 0;
        }
};

int main(){
    cout<<"Hello Main";
}

РЕДАКТИРОВАТЬ:

Что касается вопроса компоновщика:

Одно предложение C++ ожидает, что типы будут явно приведены между типами (более C). Итак, используйте приведение для преобразования time_t который возвращается time в unsigned int который является типом входного параметра srand, (И, конечно, это может не быть проблемой с ошибкой компоновщика)

Вместо того, чтобы использовать stdlib.hпопробуйте использовать <cstdlib>попробуйте, если это поможет. Потому что он использует пространство имен.

Кроме того, я видел этот фрагмент здесь. Используйте этот шаблон, если это поможет.

#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main() 
{
    srand(time(0)); //use current time as seed for random generator
    int random_variable = rand();
    cout << "Random value on [0 " << RAND_MAX << "]: " 
              << random_variable << '\n';
}

в SO проверяется уже вопрос, помогает ли это, метод Eclipse не может быть решен в простой программе C++

Никогда не используйте time() для инициализации srand ().,

РЕДАКТИРОВАТЬ:

Теперь, похоже, у многих людей возникла такая проблема. Я нашел вопрос Как мне исправить Eclipse CDT Ошибка "Функция" isdigit "не может быть решена. Он сталкивается с той же проблемой. Аскер предложил обойти это в своем вопросе редактирования.

Цитируется из этого вопроса:

Теперь я считаю, что это проблема анализа кода. Лучшее решение состоит в том, чтобы отредактировать параметры анализа кода так, чтобы "Функция не может быть решена" была предупреждением, а не ошибкой. Таким образом, вы можете видеть предупреждения в окне "Проблемы", но продолжать работать. Если функция ДЕЙСТВИТЕЛЬНО отсутствует, компилятор скажет вам! У меня также есть новая теория, что проблема заключается в том, что Code Analyzer следует за символическими ссылками, потому что все "отсутствующие" функции находятся в символических ссылочных файлах. Буду рад любой вклад в эту теорию.

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

; не должно быть там после #include,

#include <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

#include файлы не должны заканчиваться ;

Другие вопросы по тегам