2015-06-14 188 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编译器打包在一起应该不成问题。