在下面的代码中,我不明白为什么BMP2()在括号内,为什么其中的字段是这样编写的:
typedef struct BMP2
{
unsigned long biSize;
unsigned long biWidth;
unsigned long biHeight;
unsigned short biPlanes;
unsigned short biBitCount;
unsigned long biCompression;
unsigned long biSizeImage;
unsigned long biXPelsPerMeter;
unsigned long biYPelsPerMeter;
unsigned long biClrUsed;
unsigned long biClrImportant;
BMP2()
{
biWidth
= biHeight
= biCompression
= biSizeImage
= biXPelsPerMeter
= biYPelsPerMeter
= biClrUsed
= biClrImportant = 0;
biSize = sizeof(BMP2);
biPlanes = biBitCount
= 0;
}
};
答案 0 :(得分:0)
biWidth
= biHeight
= biCompression
= biSizeImage
= biXPelsPerMeter
= biYPelsPerMeter
= biClrUsed
= biClrImportant = 0;
是结构的构造函数。
这个
biWidth = 0;
biHeight = 0;
biCompression = 0;
biSizeImage = 0;
biXPelsPerMeter = 0;
biYPelsPerMeter = 0;
biClrUsed = 0;
biClrImportant = 0;
是另一种方法:
./PROGRAM TRYING TO OPEN
./FILE NAME/PROGRAM TRYING TO OPEN (or this)
答案 1 :(得分:0)
BMP()
- struct BMP
的构造函数。在c ++中允许初始化变量,如代码中所示。例如:
int var1, var2, var3;
var1 = var2 = var3 = 4;
std::cout << "var1: " << var1 << std::endl;
std::cout << "var2: " << var2 << std::endl;
std::cout << "var3: " << var3 << std::endl;
输出:
var1: 4
var2: 4
var3: 4
答案 2 :(得分:0)
C ++ Initialisations可以链接到分号,例如
a = b = c = d = e = f = 0;
此处所有内容都将初始化为0
这也可以用多行编写
a
= b
= c
= d
= f
= 0;
这就是你的案子
就BMP2()
而言,它是一个名为“CONSTRUCTOR”的C ++特殊函数,每次实例化时都会自动调用它。
答案 3 :(得分:0)
您的声明看起来像没有声明者的typedef
声明。 (目前尚不清楚你所说的“括号后面的变量名称”是什么。)
C ++ 17在没有声明符的情况下明确禁止typedef
声明,这意味着您的代码格式错误
7.1.3 typedef说明符
1 [...]如果typedef
说明符出现在没有声明者的声明中,则该程序格式不正确。
以前版本的C ++标准不包括该措辞(至少以这种简单的形式)。
由于C ++中的类(和枚举)声明可以省略声明符(并且可能,因为在C typedef
中只是一个存储类说明符),我不清楚它是否应该是正式合法的在pre-C ++ 17语言中。许多C ++编译器允许它,忽略冗余的typedef
。在这种情况下,你拥有的是类BMP2
的普通类声明。