0

我有一个分层的 ADT,我试图从客户端调用一个较低的成员。具体来说,我有一个 Graph ADT,它依赖于 List ADT 来存储邻接关系。我在调用客户端中的列表 ADT 等方法时遇到问题。

我将 List.h 包含在 Graph.h 中,然后将 Graph.h 包含在客户端中。(但向客户端添加包含 List.h 不会改变任何内容)。编译器在 Graph.h 中调用 List 构造函数没有问题,但是当我调用诸如 length 之类的 List 方法时,它告诉我“调用的对象长度不是函数”。

GraphClient.c 摘录

#include <stdio.h>
#include <stdlib.h>
#include "Graph.h"

int main(int argc, char** argv) {
List L = newList();
printf("%d",length(L));
}

List.c 摘录

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "List.h"

List newList(void) {
    List L = malloc(sizeof (ListObj));
    L->front = L->back = L->current = NULL;
    L->cursor = -1;
    L->length = 0;
    return (L);
}
int length(List L) {
    if (L == NULL) {
        printf("List error: calling length on NULL List reference");
        exit(1);
    }
    return (L->length);
}

Graph.c 摘录

#include <stdlib.h>
#include "Graph.h"
#include "List.h"

我是否正确分层包含?如果我不尝试在客户端内调用 List 方法,该程序可以正常工作,但没有它我将无法满足规范。

4

1 回答 1

1

在提供的代码中,您表明您需要#include "List.h"Graph.c文件中。这大概是为了让Graph.c代码调用实现的函数List.cGraphClient.c在这方面没有什么不同。也在那里添加#include "List.h"

#include <stdio.h>
#include <stdlib.h>
#include "Graph.h"
#include "List.h"

int main(int argc, char** argv) {
    List L = newList();
    printf("%d",length(L));
}
于 2013-08-05T21:08:43.927 回答