![]() |
Помогите найти ошибку
Код из самоучителя, всё переписал ошибки в двух строках выделенных жирным шрифтом.
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++; }; } |
Попробуй чуть-чуть изменить (выделено жирным):
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++ ) |
Спасибо. Получилось. Не могли бы вы объяснить причину ошибки :tongue: . Заранее благодарен за ответ.
|
KEKS-KEKS, я не нашёл в твоём коде объявление переменной Index.
|
Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0.
Вторая ошибка. Переменная Index объявляется внутри оператора case '?', который может выполниться, а может и нет, в зависимости от значения переменной theOperator. |
" Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0." Но ведь это разные переменные, они же существуют в разное время . И почему нельзя объявить переменную внутри 'case ?' если он выполнится , то переменная возникнет. А если не выполнится ,то она (переменная) и не возникнет . Я так думаю :read:
Gamover jr, переменная Index объявляется в строке в которой и есть ошибка , хотя я так и не понял почему так делать нельзя. |
Как это переменные разные?! Переменная одна в пределах процедуры. Не может быть разных переменных с одинаковым именем.
|
Alexej77, Мне непонятно почему нельзя объявить переменную внутри цикла "for"
case '?' вот так: for ( int Index = 0; Index < myNumberOfEntries; Index++ ) |
Объявить-то можно где угодно в процедуре, но повторюсь:
Цитата:
И если в дальнейшем попытаться обратиться к этой переменной (необъявленной), х.е.з., какое значение выдаст, или ошибка возникнет. Вообще, обычно все переменные объявляют в начале процедуры, и переменные цикла тоже. |
Спасибо за ответ. Но всё-таки непонятно
Цитата:
default : // смотреть текст самого первого сообщения . . . for ( int Index = 0; в этой строке никакой ошибки нет Index<myNumberOfEntries; Index++ ) ,хотя в аналогичном коде в случае case '?' появляется ошибка |
Время: 22:15. |
Время: 22:15.
© OSzone.net 2001-