[英]error: dereferencing pointer to incomplete type
我有以下代碼部分:
typedef struct Object* ObjectP;
ObjectP CreateObject(void *key) {
printf("GOT %d\n",(*(int*) key));
ObjectP objP = (ObjectP) malloc(sizeof(Object));
if (objP == NULL) {
//TODO ReportError(MEM_OUT);
return NULL;
}
objP->_key = key;
objP->_next = NULL;
objP->_numInChain = 1;
return objP;
}
typedef struct Object {
ObjectP _next;
void* _key;
int _numInChain;
} Object;
並在另一個文件中:
void IntPrint(const void *key) {
assert(key != NULL);
printf("%d",*((const int*)key));
}
在另一個文件中,我有main():
int main(int argc, char* argv[]) {
int* key = (int*) malloc(sizeof(int));
*key = 20;
ObjectP a = CreateObject(key);
IntPrint(a->_key); //THIS DOESN'T COMPILE
return 0;
}
IntPrint無法編譯。 它寫道:
錯誤:取消引用不完整類型的指針
我不明白為什么,因為IntPrint接收到void *,而a-> _ key也是void *。
謝謝!
您發布了一堆幾乎不相關的代碼,但省略了最重要的代碼:什么是ObjectP
以及如何定義它? 編譯器告訴您它被定義為指向不完整類型的指針。 那是你的問題。 如果不實際看到該定義,到底有什么問題是不可能說的。
編輯后:您的問題是,在嘗試訪問a->key
(例如main
), struct Object
的定義不可見。 您或者忘記了包含它或類似的東西。 struct Object
定義是否與ObjectP
定義位於相同的頭文件中?
您在哪里定義了ObjectP? 我建議在完全定義Object之前不要聲明它:
typedef struct Object {
struct Object* _next;
void* _key;
int _numInChain;
} Object;
typedef Object* ObjectP;
這樣,使用ObjectP應該總是安全的。 但是,如果不發布更多代碼,這只是一個盲目的猜測。
在您的main
功能中嘗試以下操作:
IntPrint((const void *) a->_key);
結構Object
中_key
的定義沒有修飾符constant
,這可能會導致警告或錯誤,具體取決於您在編譯時使用的標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.