2015-06-14 316 views
1

我正在嘗試使用一個c代碼,我沒有用自己的C++代碼編寫自己的代碼。當我嘗試編譯下面的c代碼時,出現錯誤。我不確定這個c代碼試圖用.xxx格式完成什麼。我不勝感激任何幫助。用C++編譯器編譯c代碼

const bmpfile_header_t bmp_fh = { 
     .filesz = offset + bmp_ih->bmp_bytesz, 
     .creator1 = 0, 
     .creator2 = 0, 
     .bmp_offset = offset 
    }; 

引發錯誤:在''之前缺少'}'。

+0

下面是結構中'點'的含義[很好的描述] [1]。 [1]:http://stackoverflow.com/questions/330793/how-to-initialize-a-struct-in-ansi-c – jcoppens

+2

不要編譯C代碼用C++編譯器!這些是兩種不同的語言,不幸的是它們共享了很多**語法**。但是,許多語義細微差別,可能會導致意外甚至未定義的行爲。 – Olaf

+0

你使用什麼編譯器? – Joe

回答

0

.field = value都沒有指定的(.field)初始化指定的初始化爲struct,即bmp_fh.bmp_offset被設置爲值offset,等等。你既可以給值結構的各個領域(按順序)的領域,或者刪除const並在之後分配值。或者,除非您特別希望將C代碼移植到您的C++編譯器,否則請使用C編譯器編譯C代碼並將其鏈接到您的C++程序。 C++代碼可以調用C函數。

0

這些是指定初始化程序 C++不支持它們。使用構造函數或刪除它們並按結構定義所定義的順序指定值。

請注意.filesz = offset + bmp_ih->bmp_bytesz實際上看起來很可疑,因爲C中的初始化器需要提供可在編譯器時間評估的常量表達式。然而,例如gcc允許這樣的局部變量,但const只會沒有多大意義。

0

您應該使用C編譯器編譯C代碼並對其進行鏈接。要引用變量和函數,您需要爲它們創建一個頭文件並聲明它們,並由extern "C" { }包圍,並在C++代碼中包含該頭文件。

請注意,C和C++雖然類似,但是不同的語言,因此應該使用它們各自的編譯器進行編譯。 extern聲明的主要目的是指定一種不同的方式來鏈接到包含的聲明。

由於C和C++編譯器通常使用C編譯器打包在一起應該不成問題。