C++格式掩码没有命名类型
C++ rmask does not name a type
我有来自sdl2文档的以下代码:
//Color declartions for later
Uint32 rmask, gmask, bmask, amask;
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
#else
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
#endif
代码块告诉我这个条件是真的,但在编译时,它告诉我rmask不命名类型。错误标记为从else语句的第一行开始。首先,我该如何避免这种情况?其次,我甚至需要if语句吗?
完整的错误日志为:
||=== Build: Debug in hayfysh (compiler: GNU GCC Compiler) ===|
/home/andrew/hayfysh/main.cpp|57|error: ‘rmask’ does not name a type|
/home/andrew/hayfysh/main.cpp|58|error: ‘gmask’ does not name a type|
/home/andrew/hayfysh/main.cpp|59|error: ‘bmask’ does not name a type|
/home/andrew/hayfysh/main.cpp|60|error: ‘amask’ does not name a type|
/home/andrew/hayfysh/main.cpp||In function ‘int newWindow(int, int, bool, const char*)’:|
/home/andrew/hayfysh/main.cpp|90|error: cannot convert ‘const char*’ to ‘FILE* {aka _IO_FILE*}’ for argument ‘1’ to ‘int fprintf(FILE*, const char*, ...)’|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
已通过将fprintf更改为printf 修复了第五个错误
假设这段代码正是问题发生的地方(即,它不是从函数中间提取的),那么问题是全局范围内不允许使用赋值语句。将其更改为初始化变量(是否应将其标记为常量?):
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
Uint32 rmask = 0xff000000;
Uint32 gmask = 0x00ff0000;
Uint32 bmask = 0x0000ff00;
Uint32 amask = 0x000000ff;
#else
Uint32 rmask = 0x000000ff;
Uint32 gmask = 0x0000ff00;
Uint32 bmask = 0x00ff0000;
Uint32 amask = 0xff000000;
#endif
相关文章:
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 实例化具有不完整类型的类模板格式不正确(如果该类型是在之后定义的)
- C++ 编译错误:gnu_printf是无法识别的格式函数类型
- 如何为QImage检测足够的格式(数据类型)以消耗最少的RAM
- icu::SimpleDate格式使用未定义类型的编译器错误
- 在全局命名空间中重载不依赖于用户定义类型的标准定义类型的运算符是否格式正确?
- sscanf_s:格式字符串"%d"需要类型为"int *"的参数,但可变参数 4 的类型为"WORD *"
- 查找浮点类型的内存格式
- 格式“%lf”期望“ double *”类型的论点,但参数2具有“ poly term **”类型
- 基于数据类型的printf格式
- OpenCV错误:不支持的格式或格式组合(Point3f类型的点的矢量的矢量)
- 操作方法:将 boost::endian 缓冲区类型转换回本机格式
- 如何用clang格式分隔lambda的尾部返回类型
- 警告:格式"%d"需要类型为"int*"的参数,但参数5的类型为"in
- C4477: 'fprintf' :格式字符串 '%s' 需要类型为"char *"的参数,但可变参数 1 的类型为"int *"
- 我可以做一个不形式的写入文件,然后从文件中进行整体类型的格式读取
- 警告:格式"%5f"需要类型"double",但参数3的类型为"int
- cvPreparePredictData中不支持的格式或格式组合(输入样本必须具有32fC1类型)
- 正在尝试将time_t数据类型转换为(dd/mm/yyyy)格式C++
- "%p 格式说明符的参数类型是 'void*'"是什么意思?