2016-01-02 41 views
1

你好,我包含一個問題。 這是我的頭文件結構定義和方法原型。在使用結構時在C中的不完整類型錯誤

typedef struct SymbolTable 
{ 
    ...some elements 
}ST; 

extern struct ST STable; 
void Symbol_Put(ST *S, char* sym); 

在我的C程序我使用:

#include "myheader.h" 
struct ST STable; 

和方法我使用來自頭文件的方法。

...body of the method... 
int id = Symbol_Put(STable,sym_name); 

Unfortuneately我收到此錯誤:

‘STable’ has an incomplete type 
    int s = Symbol_Put(STable,sym_name) 

我不明白什麼是錯的。我會很感激我指出我在哪裏犯了一個錯誤。謝謝!

+0

更換調用? – Olaf

+0

此行的語法不正確:'extern struct ST STable;'由於typedef,該行應該是:'extern ST STable;'或'extern struct SymbolTable STable;'。注意:當使用大多數調試器時,使用標籤名稱'SymbolTable'將導致調試器在使用typedef名稱時顯示所有包含的字段:'ST'將顯示單個字段非常困難。 – user3629249

回答

4
  1. 代碼中沒有struct ST。只有struct SymbolTableST

    更改聲明

    extern ST STable; 
    

    和定義

    ST STable; 
    
  2. Symbol_Put需要一個指針作爲第一個參數,但你傳遞一個ST。爲什麼`typedef`是你使用`struct`標籤反正由

    int id = Symbol_Put(&STable,sym_name); 
    
+0

嗯,現在我得到這個錯誤:'Symbol_Put'參數1的不兼容類型 – Dago

+0

@Dago是的,'Symbol_Put'需要一個指針。這很明顯,恕我直言。事先自己嘗試一下! – Downvoter

相關問題