(C编程)如何使用另一个文件中定义的数据结构和功能?

时间:2019-02-25 11:13:15

标签: c gcc data-structures hashmap include

说,我有一个文件dataStructure.cdataStructure.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 :(得分:0)

您忘记了退货声明

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