Форум программистов, компьютерный форум CyberForum.ru

Как обычную переменную на время сделать константой? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Насколько нужно выучить C++, перед тем как переходить на C#? http://www.cyberforum.ru/cpp-beginners/thread922839.html
Я изучаю программирование (язык С++) дома, в институте наверно тоже скоро будем его изучать. Я знаю, что C++ очень полезно знать и владение им на хорошем уровне всегда приветствуется. Но меня очень волнует, что сейчас везде стали делать акцент на C# и Java и я боюсь, что сейчас, начав изучать C++, я теряю время, которое мог бы потратить на изучение C#. Например, некоторые мои одногруппники сейчас...
C++ Стартовый код компилятора VS Программа написанная на C++ под отладкой показывает, много кода, который явно не включался в исходный код в отличие от программы написанной на ассемблере. В веб толком ничего не нашел. Рихтер вскользь упомянул про него, но толком ничего не ясно. Что почитать по данной теме? http://www.cyberforum.ru/cpp-beginners/thread922837.html
C++ Класс Car. Наследование
1) У нас есть class Car --> св-ва maxspeed, currentspeed. Методы Getmaxs(), Getcurrs() которые соответственно возвр. maxspeed и currentspeed. Также есть метод Setcurrs()(этот метод нужен для защиты от дурака) + еще есть полностью виртуальный метод virtual void Info()=0; 2) от Car наследуется Lorry (камаз) и у него переопределяется метод void Info(); 3) от Car наследуется Bus (автобус) и...
Авторизация но на сайте javascripts C++
Ув.Форумчане, хотел спросить, вот я хочу создать авторизацию на сайт. Допустим что-бы авторизоваться на сайт vk.com, все давно легко Я через сниффер увидел http://vk.com/login.php?m=1&email=логин&pass=пароль А вот пытаюсь написать программу чтоб авторизоваться тут: http://turboliker.ru/, и у меня не получается, т.к до входа в панель, там иду скрипты, и путь не виден. Так-же просматривая...
C++ непонятно зачем нужный map.value_comp http://www.cyberforum.ru/cpp-beginners/thread922816.html
непонимание здесь в том, что зачем мы пишем std::pair<char,int> highest = {'d',3006} ; если все равно всё сравнение идёт по "char" а, не по int. Для этого есть же key_comp которому при сравнении нужен только char #include <iostream> #include <map> typedef std::map<char,int> chint; int main () { chint mymap; mymap=1001; mymap=2002; mymap=3003; mymap=1101; mymap=2022; mymap=4545; ...
C++ String, конкатенация и "необъявленные" строки Доброго времени суток! Во время написания простого примера (изучаю язык) наткнулся на проблему с конкатенацией строк: #include <iostream> #include <string.h> using namespace std; int main() { string text = "text"; подробнее

Показать сообщение отдельно
kotgav
2 / 2 / 0
Регистрация: 13.07.2013
Сообщений: 62
15.07.2013, 17:10     Как обычную переменную на время сделать константой?
Извините, что заставил Вас угадывать, не хотел.
В Вашем коде есть два момента, которые я не использовал в предлагаемом виде.
Первый - это блок:
C++
1
2
3
if(count_of_callings<100)//защита от переполнения
count_of_callings++;//делаем невозможной переустановку в first_inisializer
else count_of_callings = 1;
Его я исключил полностью, т.к. библиотека используется не консольным приложением.
Второй момент - это статичные переменные:
C++
1
2
static int time_int_begin;//инициализируется нулём до первого вызова, но теперь это неважно
static int count_of_callings;//time_int_begin с нуля
Я сделал изменения в функции, но заменил переменную десятков секунд time_int_begin на переменную единиц секунд time_double_begin.
Результат неутешительный - при работе программы они не сохраняют свои значения, а меняют их при всяком обращении к функции на значение time_double, как это написано в программе. Поэтому значение секундомера всегда равно 0. Программа не работает.

Я уже пытался использовать static и static const, но "заморозить" значения после первого обращения к функции не получается:
- статические значения в 0 или заданные при инициализации значения не устанавливаются при первом обращении к функции, как это написано в книжках, а принимают всякий раз произвольные значения. Например, при установленном значении -1 они принимают значения 7, при втором цикле 19, потом еще чего-нибудь;
- при каждом обращении к функции статические переменные принимают новые значения текущего счетчика времени.
Собственно задача сводится к замораживанию первого значения переменной static. А оно не замораживается.
Мне уже подсказали, что использовать static для замораживания нельзя, нужно использовать для этих целей глобальную переменную.
Применил глобальную - тоже не замораживается.

Добавлено через 13 минут
Постараюсь пояснить работу функции.
Есть макрос, таблица переменных которого такова:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MAKE_ICON
(
    GTX328_zastavka_icon,                    // имя макроса статического изображения
    IDB_BITMAP2,                             // ID ресурса (идентификатор bmp рисунка заставки)
    GTX328_digital_icon_list,                // следующие макросы - цифры кода транспондера 
    GTX328_fail,                             // Отказы
    IMAGE_USE_ERASE,                         // режим использования рисунка
    0,                                       // флаг ASI_FLAGS
    0,0,                                     // координаты верхнего левого угла рисунка
    CLOCK_SECOND,GTX328_Zastavka_icon_cb,
    NULL,                   // переключателя иконок нет
    1,                      // Количество иконок
    0,
    0,
)
Этот макрос делает видимыми картинки в приложении, к которому создается библиотека. Приложение - не консольное, это авиасимулятор. В этом макросе я могу устанавливать только свои имена параметров и все. Работа макроса определена инструментами, неподвластными пользователю.
Первая строчка - это имя макроса. Вторая - имя первой картинки, которых может быть много. Порядок показа картинок определяет специальный параметр макроса.
Строчка CLOCK_SECOND,GTX328_Zastavka_icon_cb, содержит имя переменной, которая генерирует секунды и имя функции обратного вызова, которая срабатывает при обновлении значения секунд.
Каждой картинке соответствует свой номер.
В функции обратного вызова я читаю текущее значение секунд, присваиваю соответствующий ему номер картинки и возвращаю в макрос. Картинка выводится.
Для текущего времени эта задача решается просто и такие часы у меня работают.
Для секундомера мне надо знать начальное значение секунд, чтобы затем постоянно его вычитать из текущего значения и получать относительное время.
Вот задачу "замораживания" начального времени я и не могу решить.

Добавлено через 1 час 25 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//ну очень смешное решение))
#include <iostream>
 using namespace std;
 int foo1(int ai){
static int prevA;//инициализируется нулём до первого вызова
if(prevA == 0) prevA = ai;
const int a = prevA;//если хотите для самодисциплины
//далее работаем с переменной a, 
 
 
return a;
 }
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
for(int i=6; i<9; ++i) cout<<foo1(i)<<" ";//6 6 6 то есть не меняется значение в функции
 
    system("pause");
    return 0;
}
Прорешал первый пример в консольном приложении. Работает отлично! Это и понятно, здесь применена передача значения переменной из функции foo1() в функцию main().

Переделал пример для использования только одной функции - main().
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
// Sht_Example_StaticVar.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    
    static int prevA = -1;   //инициализируется нулём до первого вызова, переменная счетчика циклов обращения
    int ant = 0;
 
if(prevA == 0)      // Если первый цикл
    prevA = ant;        
cout << "Выводим ant" << ant;
    system("pause");
const int a = prevA;   //если хотите для самодисциплины
//далее работаем с переменной a, 
 
    for(int i=1; i<5; ++i)
        cout << a << "  Это значение а ";    //6 6 6 то есть не меняется значение в функции
 
    system("pause");
    return 0;
}
Как и ожидал, замораживания переменной a не происходит, ее значение меняется так же, как и значение переменной ant.
Так что для одной функции этот вариант не подходит.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru