解決編譯錯誤:dereferencing pointer to incomplete type 的辦法


在使用c語言寫程序時,可能遇到錯誤:error :dereferencing pointer to incomplete type。其實,這個錯誤是指針指向的結構體類型沒有定義。

原因可能有很多,但最多情況可能下面兩種:

1,使用庫函數或內核等提供的結構體時,沒有包含相應的頭文件。解決方法很簡單,就是包含對應頭文件就ok了。

2,若是自己定義的結構體,而且這個結構體恰恰是定義在.c文件中。在這種情況下,在其他.c文件中使用該結構體指針時,也會出現類似錯誤。

 

就第二種情況,筆者找到兩種解決方法:

1,將結構體定義放到.h文件中,然后在使用該結構體的.c文件中分別包含這個文件。這種方法較符合常規。

在這里需要注意,在定義頭文件時,要使用預編譯語句將頭文件包圍起來。這樣做是防止出現頭文件被重復包含的錯誤。

例如:

#ifndef  _ABC_H

#define _ABC_H

結構體定義

#endif

 

2,將結構體定義從上一個.c文件中拷至出錯的.c文件中,因為結構體定義只是聲明了結構體的大小並不真實分配空間,所以這樣做不會有問題。

示例代碼:

a.c

#include <stdio.h>
struct obj_t { int x; int y; };
struct obj_t obj;
struct obj_t * get_obj() { obj.x = 11; obj.y = 22;
return &obj; }
void show(struct obj_t *p) { printf("a=%d\nb=%d\n", p->x, p->y, __func__); }

b.c

void call_show()

{ struct obj_t *p = get_obj();
p->x = 111; p->y = 222;
show(p); }

 

main.c

int main(int argc, char **argv) { call_show(); }

執行命令:gcc a.c b.c main.c -o test

出現如下錯誤:

b.c: In function ‘call_show’: b.c:10: warning: initialization makes pointer from integer without a cast b.c:12: error: dereferencing pointer to incomplete type b.c:13: error: dereferencing pointer to incomplete tyd;"

 

如下修改b.c后,錯誤消失

struct obj_t { int x; int y; };
void call_show() { struct obj_t *p = get_obj();
p->x = 111; p->y = 222;
show(p); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM