Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194

ошибки которых на самом деле нет

16.06.2009, 13:08. Показов 1675. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
possible use of идентификатор before diffinotion(С++)
у меня в компиляторе возникает такое предупреждение, хотя все переменные объявлены ВО ВРЕМЯ.
это происходит на компиляторе Borland 3.01 на borland 3.11 все идет нормально.
хотелось бы узнать почему....код выложить на вряд ли смогу, он на 2500 строк.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2009, 13:08
Ответы с готовыми решениями:

На самом деле #define'а нету.
На самом деле #define нету. Вот например если мы напишем в c++ #define yes 1 #define no 0 то на самом деле мы получим int yes=1; ...

Число double 0.1 на самом деле не 0.1
Кто сталкивался с таким глюком, почему если я задаю double x=0.1; в дебаггере я его вижу как 0.10000000000000001 ? я знал что float...

Что такое ссылка на самом деле?
Здравствуйте. Насколько я понимаю, ссылка - это переменная, которая на самом деле является указателем на адрес другой переменной, но с...

16
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.06.2009, 13:10
хотелось бы узнать почему
компилятор считает себя умнее?
0
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
16.06.2009, 13:13  [ТС]
не думаю что это так.....раз он говорит что они не объявлены перед использованием хотя они объявлены....
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.06.2009, 13:49
мало ли что ты там не думаешь. ты сначала думал, а потом можешь и передумать. а компилятор - железный, он не передумает (((:
0
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
16.06.2009, 16:19  [ТС]
хотелось бы ответов по теме, если не знаете не пишите пожалуйста
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
16.06.2009, 16:20
Ну, я верю компилеру. Можно было бы и код увидеть. Хотя бы ввиде вложения. А остальные компилеры как?
0
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
16.06.2009, 16:30  [ТС]
вот одна из функций в которой он это делает
char *tek_data,*god,*mesyac,*chislo;вот объявление
while(1)
{
puts("vvedite tekush'uy datu i vremya(DD.MM.YY CH:MM):");
gets(tek_data);
if(strlen(tek_data)==14&&tek_data!='\0') break;
puts("Neverniy vvod!");

}
а вот здесь использование и вот в этом месте borland 3.01 говорит что использование до описания переменной tek_data на других(высших версиях) оно нормально конечно...но хотелось бы узнать из за чего здесь он ошибку находит.
с переменными *god,*mesyac,*chislo то же самое
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
void Reboot_Date(FILE *f_reis)
{
   int i,god_int,mesyac_int,chislo_int;
   char *tek_data,*god,*mesyac,*chislo;
   int reis_count, reis_max;
  //long pos;// prev, next;
   I_REIS table_reis[REIS_SZ];
 
   rewind(f_reis);
   fread(&reis_count,sizeof(int),1,f_reis);
   fread(&reis_max,sizeof(int),1,f_reis);
   fread(table_reis,sizeof(table_reis),1,f_reis);
   i=0;
 
   while(1)
     {
      puts("vvedite tekush'uy datu i vremya(DD.MM.YY CH:MM):");
      gets(tek_data);
      if(strlen(tek_data)==14&&tek_data!='\0')break;
      puts("Neverniy vvod!");
 
     }
 
   while(i!=reis_count)
     {
      while(1)
    {
     if(DateTimeCmp(table_reis[i].viezd_data[0]->data_viezda,tek_data)<0)
      {
 
       for(int j=0;j<REIS_SZ;j++)
         {
          table_reis[i].viezd_data[j]=table_reis[i].viezd_data[i+1];
 
         }
       //generirovanie dat
       strncpy(god,&table_reis[i].viezd_data[REIS_SZ-2]->data_viezda[6],2);      god[2]='\0';
       strncpy(mesyac,&table_reis[i].viezd_data[REIS_SZ-2]->data_viezda[3],2);   mesyac[2]='\0';
       strncpy(chislo,table_reis[i].viezd_data[REIS_SZ-2]->data_viezda,2);       chislo[2]='\0';
       god_int=atoi(god);//perevodim is char v int
       mesyac_int=atoi(mesyac);
       chislo_int=atoi(chislo);
       i=0;
 
 
        if(table_reis[i].period==0)
        {
         if(chislo_int>=30) {mesyac_int++;chislo_int=1;
         if(mesyac_int>=13){god_int++;mesyac_int=1;}   }
 
         else chislo_int++;
 
        itoa(chislo_int,chislo,10);//perevodim is int v char
        itoa(mesyac_int,mesyac,10);
        itoa(god_int,god,10);
        if(chislo_int<10) strcat("0",chislo);
        strcat(chislo,".");
        if(mesyac_int<10) strcat(chislo,"0");
        strcat(chislo,mesyac);
        strcat(chislo,".");
        if(god_int<10) strcat(chislo,"0");
        strcat(chislo,god);
        strcat(chislo," ");
        strcat(chislo,table_reis[i].vr_viezda);
        strcpy(table_reis[i].viezd_data[REIS_SZ-1]->data_viezda,chislo);
 
        }
         if((table_reis[i].period==1)||(table_reis[i].period==2))
           {
        chislo_int=chislo_int+2;
        if(chislo_int>=31) {mesyac_int++;chislo_int=table_reis[i].period;
        if(mesyac_int>=13){god_int++;mesyac_int=1;}   }
 
 
        itoa(chislo_int,chislo,10);
        itoa(mesyac_int,mesyac,10);
        itoa(god_int,god,10);
        if(chislo_int<10) strcat("0",chislo);
        strcat(chislo,".");
        if(mesyac_int<10) strcat(chislo,"0");
        strcat(chislo,mesyac);
        strcat(chislo,".");
        if(god_int<10) strcat(chislo,"0");
        strcat(chislo,god);
        strcat(chislo," ");
        strcat(chislo,table_reis[i].vr_viezda);
        strcpy(table_reis[i].viezd_data[REIS_SZ-1]->data_viezda,chislo);
 
 
           }
      }
      else break;
     }
      i++;
   }
 
}
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.06.2009, 16:38
ну естевственно! куда же вы сохраняете функцией gets()?
в указатель... память же у вас не выделена!! вы либо выделяйте память, либо пишите:
не char *tek_data, а char tek_data[50] и т.д.
1
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
16.06.2009, 18:45  [ТС]
Monte-Cristo, а можно char* tek_data = new char?
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.06.2009, 19:08
salvafion,
хотелось бы ответов по теме
теперь ты можешь получить ответ по теме
причина - в этом нуб-коде:

char *tek_data,*god,*mesyac,*chislo
...
gets(tek_data);
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.06.2009, 19:48
Цитата Сообщение от salvafion Посмотреть сообщение
Monte-Cristo, а можно char* tek_data = new char?
тогда уже
C++
1
char* tek_data = new char[50]; // 50 - это длина строки
но лучше просто написать
C++
1
char tek_data[50];
использование будет одинаоквым, но ты избавишься от необходимости удаления выделенной области памяти.
0
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
16.06.2009, 19:54  [ТС]
Rififi, спасибо что объяснил...прям так все понятно сразу стало))хоть я и догадывался что в этом дело...ты объясни в чем именно проблема....с памятью, с компилятором , или еще с чем...

Добавлено через 4 минуты 26 секунд
Monte-Cristo,спасибо, но вот еще вопрос: может ли из-за этого в структурах к полям фиксированного размера дописываться мусор. т.е. есть строковое поле размером 5 в него мы записываем значение а оно при переходе в kheue. функцию дописывает туда еще значений 10 всякого разного борохла, а так же местами заменяет строковые константы на всякий мусор...
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.06.2009, 20:04
Цитата Сообщение от salvafion Посмотреть сообщение
в чем именно проблема....с памятью, с компилятором , или еще с чем...
понимаешь.. ты создаешь указатель на массив символов... область памяти не выделяешь и не связывешь с указателем.. при запуске программы, у тебя указатель будет проинициализирован случайным адресом.. т.е. и запись будет просиходить в случайную область памяти... это чревато потерями данных.. например одна программа хранить в области некий результат своей работы, а потом твоя программа берет и затирает те данные, и размещает тама свои... у тебя может происзойти крэш программы... или еще хуже - системы... твой старый компилятор, не компилировал, так как ты сохранял в область памяти, неинициализированного указателя... новый компилятор, может сохранить.. но ответственность целиком ложится на программсита.. ты должен следить за этим..


Цитата Сообщение от salvafion Посмотреть сообщение
может ли из-за этого в структурах к полям фиксированного размера дописываться мусор.
при неаккуратном использовании может... поэтому советую их инициализировать '\0'..
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
16.06.2009, 20:08
salvafion,
прям так все понятно сразу стало))хоть я и догадывался что в этом дело...
а что, нынешнее поколение специализированную литературу уже не признаёт?
твою кривизну объясняют в любом учебнике по C/С++ в разделе указатели.
0
Maniac
Эксперт С++
 Аватар для ISergey
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
16.06.2009, 20:10
Цитата Сообщение от Rififi Посмотреть сообщение
а что, нынешнее поколение специализированную литературу уже не признаёт?
как видишь оно так и есть.
0
10 / 10 / 1
Регистрация: 16.06.2009
Сообщений: 194
17.06.2009, 06:55  [ТС]
ну тут вы конечно правы)))за год который я учу С++ я ни разу не открыл ни одного учебника по с++)))))так что если что извеняйте))не со зла

Добавлено через 6 минут 22 секунды
а вот здесь в чем проблема
if(((j+1)%7)==0) getch();//Каждые 7 ожидать нажатия клавиши для продолжения
такая же ошибка только с интовской переменной j
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
31
32
33
34
35
36
void Print_Reis(FILE*&f_reis)
{
 int reis_count,reis_max, i,j;
 I_REIS table_reis[REIS_SZ];
 //long pos;
 
 clrscr();
 puts("SPISOK REISOV:\n");
 
 rewind(f_reis);
 fread(&reis_count,sizeof(int),1,f_reis);
 fread(&reis_max,sizeof(int),1,f_reis);
 if(reis_count==0){ puts("reisov net!");getch(); return;}
 
 fread(table_reis,sizeof(table_reis),1,f_reis);//Загрузка в память таблицы из базы данных
 
   printf("+-----------+-----------------+--------+-------+------+\n");
   printf("| Nomer     |     Punkti      | Vremya |  Cena | Vsego|\n");
   printf("| marshruta |   sledovaniya   | v puti | bileta|  mest|\n");
   printf("+-----------+-----------------+--------+-------+------+\n");
 
 for(i=0;i<reis_count;i++)
    {
     //pos=table_reis[i].pos;
     // while(pos!=EOF)
     // {
     printf("|  %3d  |%16s| %5d | %5d |  %3d  |\n",table_reis[i].num, table_reis[i].name_marsh[0], table_reis[i].time, table_reis[i].price, table_reis[i].k_mest);
     printf("|       |%16s|       |       |   |\n", table_reis[i].name_marsh[1]);
     printf("+-------+----------------+-------+\n");
     if(((j+1)%7)==0) getch();//Каждые 7 ожидать нажатия клавиши для продолжения
     j++;
 
   //   }
    }
getch();
}
Добавлено через 10 часов 19 минут 23 секунды
и еще он почему то в строчные фиксированные массивы записывает несколько лишних совершенно левых знаков..
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.06.2009, 09:51
C
1
2
    if (strlen(tek_data) == 14 && tek_data != '\0')
        break;
надо

C
1
2
    if (strlen(tek_data) == 14 && *tek_data != '\0')
        break;
вообще конечно надо

C
1
2
    if (strlen(tek_data) == 14)
        break;
потому что strlen как раз и будет искать первый '\0' и тут он не будет первым, потому что будет четырнадцатым
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.06.2009, 09:51
Помогаю со студенческими работами здесь

Что такое string на самом деле?
Всем привет! Столкнулся с проблемой и никак не могу разобраться. Мне необходимо из строки string str получить unsignet char* для...

что же на самом деле делает strcpy?
вот такой пример #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main () { string buff; buff += &quot;what...

Передача массива в функцию - что на самом деле предается?
Имя массива это константный указатель. Когда мы передаем его в функциюvoid f1(int *iArray) f1 это происходит как pass by reference. В...

Оператор \ выражение - что же это такое на самом деле?
Какого ... выражение называют оператором?

Ссылки на сапе: есть на самом деле но нет в индексе.
Здраствуйте. C февраля начал закупать на свой ресурс сcылки на сапе и на этой неделе решил посмотреть на сколько хорошо они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru