@steelhouse, Вы хотя бы пишите, какой компилятор, ОС и что именно не работает. В Вашем случае (в линуксе), просто компилится (конечно, с флагом -std=c99 или gnu99) с предупреждениями, а дальше вполне себе работает, печатает единички и двойки. — А для компиляции без warnings добавьте, как уже говорили, time.h и возвращаемый main() тип int.
– avp
11 апр 2013 в 11:38
;
at the end of the #include
directives are the problem in your code. #include
directives don’t need (wrong to place indeed) semicolons at the end unlike C++
statements.
[Warning] extra tokens at end of #include directive [enabled by default]
It seems any character after >
in the directive causes this error/warning.
#include<iostream>a //error
Change to this:
#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";
}
EDIT:
Regarding the linker issue:
One suggestion is C++
expects types to be explicitly casted between types (more than C
). So, use a cast to convert time_t
which is returned by the time
to unsigned int
which is the input parameter type of srand
. (And of course this might not be the problem with linker error)
Instead of using stdlib.h
, try using <cstdlib>
, try if it helps. Because it uses namespace.
Apart from that, I have seen this snippet here. Use that pattern if it helps.
#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';
}
there is already question in SO check if that helps Eclipse Method could not be resolved in a simple program C++
Never use time() to initialize srand()..
EDIT:
Now it seems many people got this kind of problem. I found a question How do I fix Eclipse CDT Error “Function ‘isdigit’ could not be resolved. He is facing the same problem. The asker suggested a work around to this in his question edit.
Quoted from that question:
I now believe this to be a Code Analysis problem. A better solution is
to edit the Code Analysis options to make «Function could not be
resolved» be a warning instead of an error. That way you can see the
warnings in Problems view, but continue to work. If the function is
REALLY missing, the compiler will tell you! I also have a new theory,
that the problem is with the Code Analyzer following symlinks, because
all of the «missing» functions are in symlinked include files. Would
love any input on this theory.
Hope that points to solve the problem.
Matroskin2 1 / 1 / 0 Регистрация: 20.01.2020 Сообщений: 7 |
||||
1 |
||||
24.02.2020, 22:12. Показов 6669. Ответов 7 Метки нет (Все метки)
Помогите. Компилятор выдает предупреждение :
0 |
Yetty 7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
||||
24.02.2020, 22:17 |
2 |
|||
Matroskin2, пишите так:
1 |
1 / 1 / 0 Регистрация: 20.01.2020 Сообщений: 7 |
|
24.02.2020, 22:23 [ТС] |
3 |
С чем это связано? Я писал по методичке ну и в нете есть такие примеры как у меня .
0 |
hoggy 8726 / 4305 / 959 Регистрация: 15.11.2014 Сообщений: 9,752 |
||||
24.02.2020, 22:35 |
4 |
|||
srand((unsigned)time(0)); Код warning: use of old-style cast [-Wold-style-cast]
С чем это связано? методички пишут такие же балбесы, я пишут вот так:
1 |
2549 / 1208 / 358 Регистрация: 30.11.2013 Сообщений: 3,826 |
|
24.02.2020, 23:49 |
5 |
Добрый вечер, hoggy, а зачем перед Нету ли тут избыточности по типу
0 |
8726 / 4305 / 959 Регистрация: 15.11.2014 Сообщений: 9,752 |
|
25.02.2020, 00:00 |
6 |
а зачем перед std»::» ? оптимизация поиска имён. помогает тормозным и глупым
IDE чутка быстрее ориентироваться в коде.
1 |
Croessmah Неэпический 17815 / 10586 / 2044 Регистрация: 27.09.2012 Сообщений: 26,630 Записей в блоге: 1 |
||||
25.02.2020, 00:12 |
7 |
|||
rikimaru2013, а еще язык c++ прекрасен
1 |
4023 / 3280 / 920 Регистрация: 25.03.2012 Сообщений: 12,269 Записей в блоге: 1 |
|
25.02.2020, 01:13 |
8 |
С чем это связано? Я писал по методичке ну и в нете есть такие примеры как у меня . и что тебя смущает? warning это не ошибка
0 |
«неявное преобразование теряет целую точность: ‘time_t’ (aka ‘long’) до ‘unsigned int’
Вы теряете точность неявно, потому что time()
возвращает long
, который больше, чем unsigned int
для вашей цели. Чтобы обойти эту проблему, вы должны явно указать результат (таким образом удалив «неявную потерю точности» ):
srand( static_cast<unsigned int>(time(NULL)));
Учитывая, что сейчас 2017, я редактирую этот вопрос, предлагая рассмотреть функции, предоставленные std::chrono::*
, определенные в <chrono>
, как часть С++ 11. Ваш любимый компилятор предоставляет С++ 11? Если нет, это действительно должно быть!
Чтобы получить текущее время, вы должны использовать:
#include <chrono>
void f() {
const std::chrono::time_point current_time = std::chrono::system_clock::now();
}
Зачем мне это беспокоиться, когда time()
работает?
IMO, достаточно одной причины: ясных, явных типов. Когда вы имеете дело с большими программами среди достаточно больших команд, зная, проходят ли значения, представляющие временные интервалы или «абсолютные» времена, и какие величины являются критическими. С помощью std::chrono
вы можете проектировать интерфейсы и структуры данных, которые переносимы и пропускать сингл «time-out-a-deadline-or-milliseconds-from-now-or-wait-was-it-seconds».
;
в конце #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 следует за символическими ссылками, потому что все «отсутствующие» функции находятся в символических ссылочных файлах. Буду рад любой вклад в эту теорию.
Надеюсь, что это указывает на решение проблемы.