Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2012, 18:12   #1
Vitany
 
Регистрация: 05.12.2012
Сообщений: 7
По умолчанию Си. Ошибка в функции

Вот такая функция в модуле:
Код:
void InitStack(Stack *s, unsigned SizeBuf)
{
    Stack.Kbuf=Sizebuf;
    Stack.Uk=NULL;
    Stack.Buf=calloc(SizeBuf,sizeof(char));
}
Выдает ошибку:
\SD\Steck.c|1|error: expected ')' before '*' token|

Выдает эту ошибку во всех функциях модуля. Скобки там все на месте. В чем дело?
Vitany вне форума Ответить с цитированием
Старый 11.12.2012, 18:15   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Ошибка в первой строке? А как компилятор должен понять, что такое Stack?
Abstraction вне форума Ответить с цитированием
Старый 11.12.2012, 18:19   #3
Vitany
 
Регистрация: 05.12.2012
Сообщений: 7
По умолчанию

В заголовочном файле описана структура:
Код:
typedef struct Stack
        {
          BaseType *Buf; // Массив элементов базового типа
          unsigned Kbuf; /* Количество элементов в массиве,  заполняется при инициализации */
          unsigned Uk; /* Указывает на элемент, следующий за
                        вершиной стека */
        };
Впихнула её в основной файл - теперь выглядит так:
Код:
const int StackOk    = 0;
const int StackOver  = 1;
const int StackUnder = 2;
int   StackError; // Переменная ошибок
typedef char BaseType; // Oпределить тип элемента стека
typedef struct Stack
        {
          BaseType *Buf; // Массив элементов базового типа
          unsigned Kbuf; /* Количество элементов в массиве,  заполняется при инициализации */
          unsigned Uk; /* Указывает на элемент, следующий за
                        вершиной стека */
        };

void InitStack(Stack *s, unsigned SizeBuf)
{
    Stack.Kbuf=Sizebuf;
    Stack.Uk=NULL;
    Stack.Buf=calloc(SizeBuf,sizeof(char));
    if(Stack.Buf!=NULL)StackError=StackOk
      else StackError=StackUnder;
}

int  EmptyStack(Stack *s)
{
    return(Stack.Kbuf==0);
}
ошибки:

Код:
\SD\Steck.c|12|warning: useless storage class specifier in empty declaration|
\SD\Steck.c|14|error: expected ')' before '*' token|
\SD\Steck.c|23|error: expected ')' before '*' token|
\SD\Steck.c|28|error: expected ')' before '*' token|
||=== Build finished: 3 errors, 1 warnings ===|
Vitany вне форума Ответить с цитированием
Старый 11.12.2012, 18:23   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

И что значит, по-Вашему, typedef struct Stack {/*...*/};? По мнению компилятора (и я с ним солидарен) typedef в такой конструкции - useless.
Abstraction вне форума Ответить с цитированием
Старый 11.12.2012, 18:28   #5
Vitany
 
Регистрация: 05.12.2012
Сообщений: 7
По умолчанию

Ну вот так преподаватель дал интерфейс. В списках исправила, а тут забыла. Но даже если поменять объявление структуры на:
Код:
typedef struct
        {
          BaseType *Buf; // Массив элементов базового типа
          unsigned Kbuf; /* Количество элементов в массиве,  заполняется при инициализации */
          unsigned Uk; /* Указывает на элемент, следующий за
                        вершиной стека */
        }Stack;
ошибки никуда не деваются(

А, нет. Теперь ошибки выглядят так:

Код:
\SD\Steck.c||In function 'InitStack':|
\SD\Steck.c|16|error: expected identifier or '(' before '->' token|
\SD\Steck.c|17|error: expected identifier or '(' before '->' token|
\SD\Steck.c|18|error: expected identifier or '(' before '->' token|
\SD\Steck.c|19|error: expected expression before 'Stack'|
\SD\Steck.c|20|error: expected ';' before 'else'|
\SD\Steck.c||In function 'EmptyStack':|
\SD\Steck.c|25|error: expected ')' before '->' token|
\SD\Steck.c|25|error: expected expression before ';' token|
||=== Build finished: 9 errors, 0 warnings ===|

Последний раз редактировалось Vitany; 11.12.2012 в 18:31.
Vitany вне форума Ответить с цитированием
Старый 11.12.2012, 20:42   #6
Vitany
 
Регистрация: 05.12.2012
Сообщений: 7
По умолчанию

Вот такой код в итоге получился:
Код:
const int StackOk    = 0;
const int StackOver  = 1;
const int StackUnder = 2;
int   StackError; // Переменная ошибок
typedef char BaseType; // Oпределить тип элемента стека
typedef struct
        {
          BaseType *Buf; // Массив элементов базового типа
          unsigned Kbuf; /* Количество элементов в массиве,  заполняется при инициализации */
          unsigned Uk; /* Указывает на элемент, следующий за
                        вершиной стека */
        }Stack;

void InitStack(Stack *s, unsigned SizeBuf)
{
    Stack.Kbuf=Sizebuf;
    Stack->Uk=NULL;
    Stack->Buf=calloc(SizeBuf,sizeof(char));
    if(Stack->Buf!=NULL)StackError=StackOk
      else StackError=StackUnder;
}

int  EmptyStack(Stack *s)
{
    return(Stack->Kbuf==0);
}

void PutStack(Stack *s, BaseType E)
{
   if((Stack.Uk)==Stack.Kbuf) {StackError=StackUnder;
                                return;
   Stack.Buf[Stack.Uk]=E;
   Uk++;
}

void GetStack(Stack *s, BaseType *E)
{
    Stack.Uk--;
    If(Stack.Uk<0){StackError=StackUnder;
                    return 0;}
    E=Stack.Buf[Stack.Uk];
}

 void ReadStack(Stack *s, BaseType *E)
 {
     If (Stack.Uk==0){StackError=StackOver;
                        return 0;}
     E=Stack.Buf[Stack.Uk];
 }
Ругается на все обращения к элементам структур. Что я делаю не так? Остальные ошибки пока еще не шестерила, с ними разберусь..

Код:
||=== STACK, Debug ===|
\STACK\STACK.c||In function 'InitStack':|
\STACK\STACK.c|16|error: expected identifier or '(' before '.' token|
\STACK\STACK.c|17|error: expected identifier or '(' before '->' token|
\STACK\STACK.c|18|error: expected identifier or '(' before '->' token|
\STACK\STACK.c|19|error: expected expression before 'Stack'|
\STACK\STACK.c|20|error: expected ';' before 'else'|
\STACK\STACK.c||In function 'EmptyStack':|
\STACK\STACK.c|25|error: expected ')' before '->' token|
\STACK\STACK.c|25|error: expected expression before ';' token|
\STACK\STACK.c||In function 'PutStack':|
\STACK\STACK.c|30|error: expected ')' before '.' token|
\STACK\STACK.c|30|error: expected expression before '==' token|
\STACK\STACK.c|32|error: expected identifier or '(' before '.' token|
\STACK\STACK.c|33|error: 'Uk' undeclared (first use in this function)|
\STACK\STACK.c|33|error: (Each undeclared identifier is reported only once|
\STACK\STACK.c|33|error: for each function it appears in.)|
\STACK\STACK.c||In function 'GetStack':|
\STACK\STACK.c|38|error: expected identifier or '(' before '.' token|
\STACK\STACK.c|39|warning: implicit declaration of function 'If'|
\STACK\STACK.c|39|error: expected expression before 'Stack'|
\STACK\STACK.c|39|error: expected ';' before '{' token|
\STACK\STACK.c||In function 'ReadStack':|
\STACK\STACK.c|46|error: expected expression before 'Stack'|
\STACK\STACK.c|46|error: expected ';' before '{' token|
\STACK\STACK.c||In function 'PutStack':|
\STACK\STACK.c|49|error: expected declaration or statement at end of input|
||=== Build finished: 19 errors, 1 warnings ===|
Vitany вне форума Ответить с цитированием
Старый 11.12.2012, 22:52   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
\STACK\STACK.c|16|error: expected identifier or '(' before '.' token|
Перевод: эй, что тут делает точка?!
Цитата:
\STACK\STACK.c|17|error: expected identifier or '(' before '->' token|
Перевод: эй, что тут делает имя типа (вместо имени переменной)?!
Цитата:
\STACK\STACK.c|20|error: expected ';' before 'else'|
Перевод: эй, откуда взялся else?! Может, кто-то тут точку с запятой забыл поставить?
Abstraction вне форума Ответить с цитированием
Старый 11.12.2012, 23:28   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Вы просто перепутали тип и переменные. Stack это тип, а s переменная.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в функции FlipFan Паскаль, Turbo Pascal, PascalABC.NET 3 11.05.2012 01:16
Ошибка в функции crawter ASP.NET 2 27.02.2012 19:39
Ошибка в функции. stas45rus Помощь студентам 0 13.01.2012 14:39
ошибка в функции Katus Общие вопросы Delphi 10 10.12.2011 05:43
С++. ошибка в функции. phpcreator Помощь студентам 4 16.09.2009 18:42