Скажите, у меня есть файл 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
, как предложено в других темах, но ничего не работает.