|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите найти ошибку |
|
C/C++ - Помогите найти ошибку
|
Новый участник Сообщения: 35 |
Профиль | Отправить PM | Цитировать Код из самоучителя, всё переписал ошибки в двух строках выделенных жирным шрифтом.
initialization of 'Index' is skipped by 'case' label J:\C++\Lesson 13\main.cpp(33) : see declaration of 'Index' J:\C++\Lesson 13\main.cpp(47) : error C2361: initialization of 'Index' is skipped by 'default' label J:\C++\Lesson 13\main.cpp(33) : see declaration of 'Index' Error executing cl.exe. main.obj - 2 error(s), 0 warning(s) #include <iostream> #include <exception> #include "PromptModule.h" #include "ErrorHandlingModule.h" using namespace std; char GetOperator(void) { char Operator; cout<<"OPERATOR ="; cin>>Operator; return Operator; } float GetOperand(void) { float Operand; cout<<"OPERAND ="; cin>>Operand; return Operand; } void Tape(const char theOperator,const int theOperand) { static const int myTapeChunk=3; static char *myOperator=new char[myTapeChunk]; static int *myOperand=new int[myTapeChunk]; static int myTapeSize=myTapeChunk; static int myNumberOfEntries=0; switch (theOperator) { case '?':for ( int Index=0; ОШИБКА Index < myNumberOfEntries; Index++ ) { cout << myOperator[Index]<<","<<myOperand[Index]<<endl; }; break; case '.': ОШИБКА delete [] myOperator; delete [] myOperand; break; default : // dobavitj k lente i passhiritj 51 if (myNumberOfEntries == myTapeSize) { char *ExpendedOperator=new char[myNumberOfEntries+myTapeChunk]; int *ExpendedOperand=new int [myNumberOfEntries+myTapeChunk]; char *FromOperator=myOperator; int *FromOperand=myOperand; char *ToOperator=ExpendedOperator; int *ToOperand=ExpendedOperand; for ( int Index = 0; Index<myNumberOfEntries; Index++ ) { *ToOperator++= *FromOperator++; *ToOperand++= *FromOperand++; }; delete[] myOperator; delete[] myOperand; myOperator=ExpendedOperator; myOperand=ExpendedOperand; myTapeSize+=myTapeChunk; }; myOperator[myNumberOfEntries]=theOperator; myOperand[myNumberOfEntries]=theOperand; myNumberOfEntries++; }; } |
|
Отправлено: 20:33, 27-10-2007 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Попробуй чуть-чуть изменить (выделено жирным):
void Tape(const char theOperator,const int theOperand) { static const int myTapeChunk=3; static char *myOperator=new char[myTapeChunk]; static int *myOperand=new int[myTapeChunk]; static int myTapeSize=myTapeChunk; static int myNumberOfEntries=0; int Index; switch (theOperator) { case '?':for ( Index=0; ОШИБКА Index < myNumberOfEntries; Index++ ) ) { cout << myOperator[Index]<<","<<myOperand[Index]<<endl; }; break; case '.': ОШИБКА delete [] myOperator; delete [] myOperand; break; default : // dobavitj k lente i passhiritj 51 if (myNumberOfEntries == myTapeSize) { char *ExpendedOperator=new char[myNumberOfEntries+myTapeChunk]; int *ExpendedOperand=new int [myNumberOfEntries+myTapeChunk]; char *FromOperator=myOperator; int *FromOperand=myOperand; char *ToOperator=ExpendedOperator; int *ToOperand=ExpendedOperand; for ( Index = 0; Index<myNumberOfEntries; Index++ ) |
Отправлено: 21:59, 27-10-2007 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Спасибо. Получилось. Не могли бы вы объяснить причину ошибки . Заранее благодарен за ответ.
|
Отправлено: 23:43, 27-10-2007 | #3 |
Пользователь Сообщения: 100
|
Профиль | Отправить PM | Цитировать KEKS-KEKS, я не нашёл в твоём коде объявление переменной Index.
|
Отправлено: 12:19, 28-10-2007 | #4 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0.
Вторая ошибка. Переменная Index объявляется внутри оператора case '?', который может выполниться, а может и нет, в зависимости от значения переменной theOperator. |
|
Отправлено: 20:41, 28-10-2007 | #5 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать " Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0." Но ведь это разные переменные, они же существуют в разное время . И почему нельзя объявить переменную внутри 'case ?' если он выполнится , то переменная возникнет. А если не выполнится ,то она (переменная) и не возникнет . Я так думаю
Gamover jr, переменная Index объявляется в строке в которой и есть ошибка , хотя я так и не понял почему так делать нельзя. |
Отправлено: 23:00, 28-10-2007 | #6 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Как это переменные разные?! Переменная одна в пределах процедуры. Не может быть разных переменных с одинаковым именем.
|
Отправлено: 23:56, 28-10-2007 | #7 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Alexej77, Мне непонятно почему нельзя объявить переменную внутри цикла "for"
case '?' вот так: for ( int Index = 0; Index < myNumberOfEntries; Index++ ) |
Отправлено: 22:00, 30-10-2007 | #8 |
Старожил Сообщения: 181
|
Профиль | Отправить PM | Цитировать Объявить-то можно где угодно в процедуре, но повторюсь:
Цитата Alexej77:
И если в дальнейшем попытаться обратиться к этой переменной (необъявленной), х.е.з., какое значение выдаст, или ошибка возникнет. Вообще, обычно все переменные объявляют в начале процедуры, и переменные цикла тоже. |
|
Отправлено: 20:16, 31-10-2007 | #9 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Спасибо за ответ. Но всё-таки непонятно
Цитата Alexej77:
default : // смотреть текст самого первого сообщения . . . for ( int Index = 0; в этой строке никакой ошибки нет Index<myNumberOfEntries; Index++ ) ,хотя в аналогичном коде в случае case '?' появляется ошибка |
|
Отправлено: 20:30, 01-11-2007 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Помогите найти ошибку в скрипте | Anarasius | AutoIt | 4 | 03-01-2010 21:38 | |
CMD/BAT - [решено] Помогите найти ошибку | ofcoss | Скриптовые языки администрирования Windows | 7 | 21-07-2009 17:40 | |
Помогите найти ошибку PHP + MySQL | darksmoke | Вебмастеру | 3 | 26-11-2008 19:51 | |
Помогите найти ошибку в массиве | bezumes | Программирование и базы данных | 5 | 28-03-2006 17:25 | |
Помогите найти ошибку в трёх строках (perl) | Guest | Вебмастеру | 9 | 30-06-2004 12:57 |
|