2014-02-16 24 views
3

我試圖在目標C.目標C - 在頭文件中使用typedef結構

創建一個LinkedList在.h文件我想使用的代碼來創建一個節點:

@interface AALinkedList : NSObject 
{ 
    typedef struct Node 
    { 
     int data; 
     struct Node *next; 
    } Node; 
} 

這給我一個錯誤說Type name does not allow storage class to be specified

這是什麼意思?我該如何解決它?

+1

你不能在Objective-C類的數據部分定義一個新類型。 'storage class'就是'typedef',因爲它是一個類似'static'或'auto'的存儲類。 – user3125367

回答

4
typedef struct Node { 
    int data; 
    Node *next; 
} Node; 

@interface AALinkedList : NSObject 
{ 
    Node node; 
    // or Node *node; 
} 
+0

爲什麼它會超出@interface? –

+1

因爲@interface {與struct {'幾乎相同,並且你沒有在結構體中定義新的類型。即使你有能力,這也是毫無意義的,因爲這個名字的範圍只限於那個結構。 – user3125367

0

您不能在.h文件中聲明typedef。在.m中聲明它。這應該讓你去。把方法簽名上.h

你可以創建一個簡單的LinkedList類這樣。

@interface LinkedNode : NSObject 
    @property (nonatomic, strong) id nextNode; 
@end 
then you use it as you would expect: 

id currentNode = myFirstNode; 
do { 
    [currentNode someMessage]; 
} 
while(currentNode = currentNode.nextNode); 
+0

爲什麼?並在.m文件中的位置? –

+0

編輯我的答案。 – 2014-02-16 09:36:01

+0

這是不正確的,你可以在.h或.m文件的正確位置*聲明*。雖然使用屬性比結構更好。 – Wain