2013-08-05 40 views
0

我有一個分層的ADT,我試圖從客戶端調用一個較低的成員。具體來說,我有一個Graph ADT依賴List ADT來存儲鄰接關係。我在調用方法(如客戶端中的List ADT的長度)方面存在問題。調用對象不是一個函數 - 如何正確地嵌套標頭來調用方法

我在Graph.h中包含List.h,然後在客戶端中包含Graph.h。 (但是向客戶端添加一個包含List.h的內容不會改變任何內容)。編譯器在調用Graph.h中的List構造函數時沒有問題,但是當我調用諸如長度之類的List方法時,它告訴我「調用對象長度不是函數」。

GraphClient.c exerpt

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

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

List.c exerpts

#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 exerpts

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

我是否排列層級的正確包括?如果我不試圖在客戶端內部調用List方法,該程序工作正常,但如果沒有,我不會滿足規範。

+1

你在'int main(...){...}'中沒有#include「List.h」嗎? – t0mm13b

+3

我們應該猜測List.h的內容嗎?你不發佈[最小完整示例](http://sscce.org)的原因是什麼? – Beta

回答

1

在提供的代碼中,顯示您需要在Graph.c文件中使用#include "List.h"。這大概是允許Graph.c代碼調用在List.c中實現的功能。 GraphClient.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)); 
}