Srand time null в чем ошибка

@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

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Помогите. Компилятор выдает предупреждение :
Domm 5.1.cpp(11,15): warning C4244: ‘argument’: conversion from ‘time_t’ to ‘unsigned int’, possible loss of data

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand(time(NULL));
    const int n = 20;
    int a[n];
    for (int i = 0; i < n; i++) {
        a[i] = rand() % 100;
        cout << a[i] << " ";
    }
    cout << endl;
    int is, c;
    do {
        is = 0;
        for (int i = 1; i < n; i++)
            if (a[i - 1] > a[i])
            {
                c = a[i];
                a[i] = a[i - 1];
                a[i - 1] = c;
                is = 1;
            };
    } while (is);
    for (int i = 0; i < n; i++)
        cout << a[i] << " ";
}



0



Yetty

7427 / 5021 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

24.02.2020, 22:17

2

Matroskin2, пишите так:

C++
1
srand((unsigned)time(0));



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

Цитата
Сообщение от Yetty
Посмотреть сообщение

srand((unsigned)time(0));

Код

warning: use of old-style cast [-Wold-style-cast]

Цитата
Сообщение от Matroskin2
Посмотреть сообщение

С чем это связано?

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

я пишут вот так:

C++
1
2
3
    ::std::srand(
        static_cast<unsigned>( ::std::time(0) )
    );



1



2549 / 1208 / 358

Регистрация: 30.11.2013

Сообщений: 3,826

24.02.2020, 23:49

5

Добрый вечер, hoggy, а зачем перед std «::» ?

Нету ли тут избыточности по типу int _count = 0; // количество



0



Эксперт С++

8726 / 4305 / 959

Регистрация: 15.11.2014

Сообщений: 9,752

25.02.2020, 00:00

6

Цитата
Сообщение от rikimaru2013
Посмотреть сообщение

а зачем перед std»::» ?

оптимизация поиска имён.

помогает тормозным и глупым

Visual Studio

IDE чутка быстрее ориентироваться в коде.



1



Croessmah

Неэпический

17815 / 10586 / 2044

Регистрация: 27.09.2012

Сообщений: 26,630

Записей в блоге: 1

25.02.2020, 00:12

7

rikimaru2013, а еще язык c++ прекрасен

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdlib>
#include <ctime>
 
namespace some {
    namespace std {
        int time(int *) {
            return 0;
        }
        void srand(int) {
            ::std::cout << "yeah!n";
        }
    }
    
    void bar() {
        std::srand(time(0)); //x::std::srand
        ::std::srand(time(0));//::std::srand
    }
}
 
 
int main()
{
    some::bar();
}



1



4023 / 3280 / 920

Регистрация: 25.03.2012

Сообщений: 12,269

Записей в блоге: 1

25.02.2020, 01:13

8

Цитата
Сообщение от Matroskin2
Посмотреть сообщение

С чем это связано? Я писал по методичке ну и в нете есть такие примеры как у меня .

и что тебя смущает? 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 следует за символическими ссылками, потому что все «отсутствующие» функции находятся в символических ссылочных файлах. Буду рад любой вклад в эту теорию.

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

Понравилась статья? Поделить с друзьями:
  • Squid изменить сообщение об ошибке
  • Square enix код ошибки i2501
  • Squad ошибка при запуске приложения 0xc000007b
  • Squad ошибка unreal engine 4 crash reporter
  • Squad out of video memory ошибка