2012-07-10 77 views
3

我有以下結構:Ç - 設置一個結構爲空(不兼容類型分配)

struct elem { 
    int number; 
    char character; 
}; 

struct item { 
    struct elem element; 
}; 

及以下功能:

void init(struct item *wrapper) { 
    assert(wrapper != NULL); 
    wrapper->element = NULL; 
} 

item->element = NULL產生一個incompatible types in assignment。這是爲什麼?不應該將一個結構設置爲NULL是否可以?

+2

只有指針可以設置爲NULL。你正在試圖清空一個對象。 – Mysticial 2012-07-10 15:10:05

+2

也許你想'memset'它改爲0? – cnicutar 2012-07-10 15:10:47

回答

7

在C NULL通常被定義爲以下

#define NULL ((void*)0) 

這意味着它是一個指針值。在這種情況下,您試圖將一個指針(NULL)分配給非指針值item::element並獲取相應的消息。好像你的意圖是讓element是指針這裏,所以請嘗試以下

struct item { 
    struct elem* element; 
}; 
+0

關於'main',我沒有使用它。我只是不知道在這裏爲這個問題命名結構。我會在這裏重新命名它。 – darksky 2012-07-10 15:24:29

+0

但'init'需要一個指針。 'wrapper'是一個指向該結構體的指針,所以我應該可以使用' - >'將其設置爲NULL。沒有? – darksky 2012-07-10 15:27:17

+0

@Darksky儘管你有一個指向'main'的指針,'main'裏面的'element'字段仍然是一個非指針類型。 – JaredPar 2012-07-10 15:28:34

4

NULL是一個指針值,wrapper->element不是指針,因此不能將其指定NULL

+0

但'init'需要一個指針。 'wrapper'是一個指向該結構體的指針,所以我應該可以使用' - >'將其設置爲NULL。沒有? – darksky 2012-07-10 15:28:23

+0

@Darksky外部對象是一個指針,但結構的成員對象不是一個指針。無論'wrapper'對象是一個指針,通過值傳遞還是(在C++中)引用,它都不會改變成員的類型以匹配 – 2012-07-10 15:29:35

1
  1. 元素不是一個指針,因此不能被分配NULL。
  2. main->element錯誤的用法。您無法使用名稱來訪問結構的元素。它應該是wrapper->element。你應該使用變量名來訪問它。
+0

+1爲了捕捉一個重要的缺陷。它不應該是'main',而是'wrapper'。 – ArjunShankar 2012-07-10 15:16:02

+0

2.這是一個錯字。顯然,否則錯誤會不同。 – darksky 2012-07-10 15:25:54

相關問題