При попытке использовать header file появляется множество ошибок - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть файл с функциями, он компилется без ошибок и все работает нормально, но при попытке использовать , как header file появляется тьма ошибок собственно сам файл с функциями
#ifndef rect_H
#define rect_H

#include <stdio.h>
#include <string.h>
 
struct cell                                                             // описание одной ячейки хэш таблицы
{
    int infcell;                                                        // информация о ячейке (удалена=-1, пуста=0, занята=1)
    char str[256];                                                      // строка 
}

int hash(char *str) 
{
    int h;
    h=0;
    while (*str) h += *str++;
    return h;
}

//функция добавления записи в хэш таблицу
//возвращает значения
//0--таблица переполнена(слишком много коллизий)
//1--добавление прошло успешно
//2--добавление не произведено, строка уже есть в таблице

int add_cell(struct cell *table, char *string)                                      
{       
    
    int pos;                                                            //индекс который указывает куда необходимо будет произвести запись новой строки
    int i;                                                              //номер пробы 
    int j;                                                              //вспомогательный индекс для просмотра хэш таблицы
    pos=-1;                                                             
    i=0;
    j=0;

    do
    {                                                                   //Алгорит добавление строки 
        j=hash(string)+i*256;                                           //вычисление ключа для вставки в хэш таблицу 
        if (table[j].infcell==-1)                                       //если ячейка была удалена
            {
            pos=j;                                                      //изменить значени pos на j
            };
        if  ((table[j].infcell==1)&&(strcmp(table[j].str,string)==0))   //если ячейка с ключем занята и в ней содержется строка, которая идентична вставляемой,то
            {
            return 2;                                                   //завершить выполнение функции с значением 2
            }
        i++;                                                            //увеличить номер пробы
    }
    while (((i*256)>=1024) || (table[j].infcell!=0));                   //выполнять алгоритм, пока хэш таблица не закончится или не встретим свободную ячейку
    
    if (((i*256)>=1024) && (pos==-1))                                   //если таблица закончилась и не встретилась ячейка удаленная ячейка, то     
        {
            return 0;                                                   //завершить выполнение функции с значением 0
        };
        
    if (pos==-1)                                                        //если не встретилась удаленная ячейка , то 
            {
            pos=j;                                                      //изменить значение индекса вставляемой ячейки на индекс текущей пустой ячейки 
            };
 
    table[pos].infcell=1;                                               //статус ячейки занята
    strcpy(table[pos].str,string);                                      //скопировать данные из вставляемой строки в ячейку хэш таблицы                                     
    return 1;                                                           //завершить выполнение функции с значение 1
}
 
//функция поиска ячейки в хэш таблице
//возвращает номер элемента в таблице
//или -1 если элемент не найден
//передаем хэш таблицу и строку которую необходимо найти

int search_cell(struct cell *table, char *st)
{   
    int i;                                                              //номер пробы
    int j;                                                              //индекс текущей ячеки в хэш таблице
    j=0;
    i=0;
    do                                                                  //алгоритм поиска 
    {
        j=hash(st)+i*256;                                               //вычисление индекса где возможно находится искомая строка
        if ((table[j].infcell==1)&&(strcmp(table[j].str,st)==0))        //если ячейка занята и искомая строка совпадает с строкой из  хэш таблицы, то
            {
            return j;                                                   //функция возращает номенр ячейки соднржащей ячейку и прекращает свою работу
            };
        i++;                                                            //увеличение номера пробы на +1
    }
    while (((i*256)>=1024) || (table[j].infcell!=0));                   //выполняется пока не закончится хэш-таблтица 
    return -1;                                                          //функция не найдя соответствие возвращает -1
}

//функция которая удаляет из хэш таблицы строку
//возвращает 1, если удаление прошло успешно
//возвращает -1,если строка не была найдена в хэш таблице

int delete_cell(struct cell *table, char *st)
{   
    int i;                                                              //номер пробы
    int j;                                                              //индекс текущей ячеки в хэш таблице
    int k;                                                              //вспомогательный индекс для очистки строки
    j=0;
    i=0;
    do
    {
        j=hash(st)+i*256;                                               //вычисление индекса где возможно находится искомая строка
        if ((table[j].infcell==1)&&(strcmp(table[j].str,st)==0))        //если ячейка занята и удаляема строка со впадает с данными в ячейке, то
            {
            for(k=0; k<256; k++)                                        //удаление данных из ячейки
                {
                table[j].str[k]='\0';
                };
            table[j].infcell=-1;                                        //изменение статуса ячейки
            return 1;                                                   //завершение работы функции с значением 1
            };
        i++;                                                            //увеличение пробы на 1
    }
    while (((i*256)>=1024) || (table[j].infcell!=0));                   //алгоритм выполняется, пока таблица не закончится или ячейка не будет свободной
    return -1;                                                          //завершение работы функции с значением -1
}

#endif
Сама прога даже так происходят ошибки компиляции
#include <stdio.h>
#include "rect"
 
int main()
{   

return 0;
}
gcc -Wall -c "hell.c" (в каталоге: /home/user/Desktop/Hash) In file included from hell.c:2: rect:15: error: two or more data types in declaration specifiers rect: In function ‘hash’: rect:20: error: incompatible types when returning type ‘int’ but ‘struct cell’ was expected In file included from hell.c:2: rect: In function ‘add_cell’: rect:56: error: invalid operands to binary + (have ‘struct cell’ and ‘int’) rect: In function ‘search_cell’: rect:96: error: invalid operands to binary + (have ‘struct cell’ and ‘int’) rect: In function ‘delete_cell’: rect:120: error: invalid operands to binary + (have ‘struct cell’ and ‘int’) Сборка завершилась с ошибкой.

Решение задачи: «При попытке использовать header file появляется множество ошибок»

textual
Листинг программы
unsigned int hash(char* str)
{
    unsigned int h = 0; // можно использовать другое значение, например простое число или длину строки
    while( *str ) {
        h = 101 * h + *str++;
    }
    return h;
}

Объяснение кода листинга программы

В данном коде представлена функция с именем hash, которая принимает на вход указатель на строку символов (char*) и возвращает целочисленное значение (unsigned int). Список действий, выполняемых в коде:

  1. Инициализация переменной h значением 0.
  2. Запуск цикла while, который будет выполняться до тех пор, пока не встретится нулевой символ (*str).
  3. Внутри цикла значение переменной h увеличивается на 101, умноженное на текущее значение h, и к полученному результату добавляется значение символа, на который указывает текущий указатель str.
  4. После завершения цикла, функция возвращает полученное значение h. Пример вызова функции: int main() {     char* str = Пример строки;     unsigned int h = hash(str);     printf(%u\n, h);     return 0; }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы