(Программирование на C) Как использовать структуру данных и функции, которые определены в другом файле? - PullRequest
0 голосов
/ 25 февраля 2019

Скажите, у меня есть файл dataStructure.c и dataStructure.h.(Моя структура данных - это хэш-карта.) Эти файлы содержат реализацию структуры данных и методы для добавления новых записей в структуру, а также для извлечения записей.

Вот пример:

// dataStructure.h

struct node {
    char *label;
    int address;
    struct node *next; // Points to the next node.
};

struct ourTable {
    int size;
    struct node **list; // List of all the (key, value) pairs.
};

// Then, here are methods to create table, add new entries and retrieving them.
struct ourTable createTable(int size);

void addEntry(struct ourTable *t, char *label, int address);

unsigned retrieveAddress(struct ourTable* table, char *label);

Функция retrieveAddress в основном просто возвращает адрес этой метки.Так как я пытаюсь реализовать хеш-карту, которая представляет собой просто структуру данных из нескольких пар (ключ, значение).В моем случае ключ label, тогда как значение address.

unsigned retrieveAddress( struct ourTable* table, char *label)
{
    int bin = 0;
    bin = hashFunction(table, label); // Hashing function

    struct node *list = table->list[bin];
    struct node *entryItem = list;
    while(entryItem)
    {
        if (entryItem->label == label)
        {
            return entryItem->address; // Returns the address of that label.
        }
        entryItem = entryItem->next;
    }
    return NULL;
}

Затем у меня есть другой файл, establishTable.c, который просто использует методы, реализованные в dataStructure.h, для создания таблицы.а затем добавить новые записи.Вот что я написал в этом файле:

// establishTable.c

#include "dataStructure.h"

struct ourTable establishTable()
{    
    struct ourTable table = createTable(1000); // Create a table with a maximum of 1000 entries.
    addEntry(&table, "word", 1234);
}

И я хочу передать структуру ourTable с новыми записями, которые я вставил в establishTable.c, в основной файл main.c.Чтобы проиллюстрировать, что я пытаюсь выполнить:

// main.c

#include "dataStructure.h"

#include "establishTable.h"

int main()
{
    // I'm not sure how to pass the data structure... Something like this:
    struct ourTable table = establishTable(); 

    // Get the retrieveLabel function from dataStructure.h and use it here.
    printf("retrieved from the table at %u\n\n", retrieveAddress(&table,"word") );
}

Я попытался запустить main.c.Он не показывает никаких ошибок, но просто выводит

retrieved from the table at 0

, который просто говорит мне, что таблица, которую я уже установил, не была передана вообще.Вывод должен быть 1234.

Итак, как мне передать структуру данных и результат функции из другого файла в мой файл main.c?Это работает, когда я просто делаю все в establishTable.c, но это не мое намерение.Я пробовал метод extern, как предложено в других темах, но ничего не работает.

1 Ответ

0 голосов
/ 26 февраля 2019

Вы забыли ответное заявление

struct ourTable establishTable()
{    
    struct ourTable table = createTable(1000); // Create a table with a maximum of 1000 entries.
    addEntry(&table, "word", 1234);
    return table;
}
...