2011-04-05 279 views
1

編譯時以下錯誤的含義是什麼?C編譯錯誤

Tilemap.h:21: error: conflicting types for ‘ThreeDWorld’ 
Tilemap.h:21: error: previous declaration of ‘ThreeDWorld’ was here 
Tilemap.h:29: error: conflicting types for ‘CGPoint’ 
Tilemap.h:29: error: previous declaration of ‘CGPoint’ was here 
Tilemap.h:31: error: conflicting types for ‘tileForCoordinates’ 
Tilemap.h:31: error: previous declaration of ‘tileForCoordinates’ was here 

爲什麼它給了什麼呢?我的源文件有它的一個實例是這樣

typedef struct 
{ 
int xPosition; 
int yPosition; 
} 
CGPoint; 
+0

你是否偶然使用Obj-C和XCODE? – 2011-04-05 16:38:38

+0

Textmate和Terminal – jarryd 2011-04-05 16:48:14

回答

5

你是否包括來自多個地方的頭文件中的錯誤?如果是的話,在頭文件中使用警衛。

例如,在Tilemap.h:

#ifndef TILEMAP_H 
#define TILEMAP_H 

// header file contents 

#endif /* TILEMAP_H */ 
+1

一些編譯器支持#pragma一次。 – flolo 2011-04-05 16:33:33

+0

很酷。感謝這一點。 ;) – jarryd 2011-04-05 16:36:19

2

沾些包容守衛你的頭。

您的類型定義在您的編譯單元中出現多次。

2

您包含頭文件兩次。

在我自己的代碼,我包的所有頭文件與

#ifndef HEADER_FILE_NAME 
#define HEADER_FILE_NAME 

#endif 

,以避免此類錯誤。