Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите найти ошибку

Ответить
Настройки темы
C/C++ - Помогите найти ошибку

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить 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
Благодарности: 43

Профиль | Отправить 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
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо. Получилось. Не могли бы вы объяснить причину ошибки . Заранее благодарен за ответ.

Отправлено: 23:43, 27-10-2007 | #3


Пользователь


Сообщения: 100
Благодарности: 0

Профиль | Отправить PM | Цитировать


KEKS-KEKS, я не нашёл в твоём коде объявление переменной Index.

Отправлено: 12:19, 28-10-2007 | #4


Старожил


Сообщения: 181
Благодарности: 43

Профиль | Отправить PM | Цитировать


Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0.
Вторая ошибка. Переменная Index объявляется внутри оператора case '?', который может выполниться, а может и нет, в зависимости от значения переменной theOperator.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:41, 28-10-2007 | #5


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


" Первая ошибка. В одной процедуре (Tape) два раза объявляется переменная Index - int Index=0." Но ведь это разные переменные, они же существуют в разное время . И почему нельзя объявить переменную внутри 'case ?' если он выполнится , то переменная возникнет. А если не выполнится ,то она (переменная) и не возникнет . Я так думаю

Gamover jr, переменная Index объявляется в строке в которой и есть ошибка , хотя я так и не понял почему так делать нельзя.

Отправлено: 23:00, 28-10-2007 | #6


Старожил


Сообщения: 181
Благодарности: 43

Профиль | Отправить PM | Цитировать


Как это переменные разные?! Переменная одна в пределах процедуры. Не может быть разных переменных с одинаковым именем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:56, 28-10-2007 | #7


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Alexej77, Мне непонятно почему нельзя объявить переменную внутри цикла "for"
case '?' вот так:
for
(
int Index = 0;
Index < myNumberOfEntries;
Index++
)

Отправлено: 22:00, 30-10-2007 | #8


Старожил


Сообщения: 181
Благодарности: 43

Профиль | Отправить PM | Цитировать


Объявить-то можно где угодно в процедуре, но повторюсь:
Цитата Alexej77:
case '?', который может выполниться, а может и нет, в зависимости от значения переменной theOperator. »
Компилятор, по идее, должен предупреждать об этом.
И если в дальнейшем попытаться обратиться к этой переменной (необъявленной), х.е.з., какое значение выдаст, или ошибка возникнет.
Вообще, обычно все переменные объявляют в начале процедуры, и переменные цикла тоже.

Отправлено: 20:16, 31-10-2007 | #9


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за ответ. Но всё-таки непонятно
Цитата Alexej77:
case '?', который может выполниться, а может и нет, в зависимости от значения переменной theOperator. » »
, ну и что ,что case '?' не выполнится ,тогда и переменная не возникнет и не будет проблем. И почему компилятор пропускает в случае default :


default : // смотреть текст самого первого сообщения
.
.
.
for
(
int Index = 0; в этой строке никакой ошибки нет
Index<myNumberOfEntries;
Index++
)

,хотя в аналогичном коде в случае case '?' появляется ошибка

Отправлено: 20:30, 01-11-2007 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите найти ошибку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите найти ошибку в скрипте 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




 
Переход