2011-01-12 32 views
1

考慮以下typedef結構在C:çtypedef結構的不確定性

21:typedef struct source{ 
22: double ds;    //ray step 
23: double rx,zx;   //source coords 
24: double rbox1, rbox2; //the box that limits the range of the rays 
25: double freqx;   //source frequency 
26: int64_t nThetas;  //number of launching angles 
27: double theta1, thetaN; //first and last launching angle 
28:}source_t; 

我得到的錯誤:
globals.h:21:錯誤:28: '結構源'
globals.h的重新定義:28::注:錯誤:「source_t」
globals.h衝突的類型「source_t」先前的聲明在這裏

我已經使用其他格式的這個定義嘗試:


struct source{ 
... 
}; 
typedef struct source source_t; 


typedef struct{ 
... 
}source_t; 

兩者均返回相同的錯誤。 這是爲什麼發生?它看起來完全適合我。

+3

看起來像「globals.h」文件從源文件中獲取兩次 – SirDarius 2011-01-12 10:55:29

+0

完美適合我:http://ideone.com/kKj8q – eckes 2011-01-12 10:57:31

+0

基於SirDarius的評論:你有沒有設置一個** reinclude保護**在`globals.h`中? – eckes 2011-01-12 10:58:29

回答

6

你確定你沒有包括你的頭兩次(沒有使用#ifndef/#pragma once來避免)? 即使您的構造中出現了一些錯誤,它也不應該引發錯誤「重新定義'...'」,因爲它是第一行?

3

最可能的原因是您的頭文件被多次包含。 您需要確保如果發生這種情況,typedef只能執行一次。

您可以通過包裝globals.h做到這一點:

#ifndef _globals_h_ 
    #define _globals_h_ 
    [...] 
    #endif 
3

的錯誤說struct source已經被定義不止一次。

也許你包含頭文件兩次?

只是要在安全方面,要確保你的頭被只包括一次:把

#ifndef YOUR_HEADER_FILE_NAME 
#define YOUR_HEADER_FILE_NAME 

開頭,並

#endif 

在你的頭文件的末尾:這將防止它被任何源文件包含兩次或更多次。