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 <iostream>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include
файлы не должны заканчиваться ;