C++致命错误C1017
C++ Fatal Error C1017
我得到了:
致命错误C1017:整数常量表达式无效
带有以下代码:
#if V1>0
//do stuff
#endif
V1在.cpp文件的顶部定义如下:
#define V3 UINT32
#define V4 sizeof(V3)
#define V1 (V2 % V4)
V2定义如下:
const int V2 = 256;
有人能看出我哪里错了吗?
编译前进行预处理。这意味着您不能在预处理期间使用编译时概念(即const int TOTAL = 16;
)。预处理器不知道程序中的变量(甚至是const
)。
与Wug建议的使用#define
作为常数不同,更清洁的解决方案是:
typedef UINT32 TARGET_TYPE;
const int TARGET_TYPE_SIZE = sizeof(TARGET_TYPE);
const int TOTAL = 16;
const int NUM_BYTES = (TOTAL % TARGET_TYPE_SIZE);
尝试
#define V2 256
而不是
const int V2 = 256;
编辑:你做预处理器宏而不是常规分支是有充分理由的,对吧?
编辑2:正如其他人所指出的,预处理器不接受sizeof语句,因为这些语句是由编译器处理的。您可以选择使用编程if语句(而不是预处理器语句)或使用size表达式的实际值(这将涉及对大小进行硬编码。然而,由于它是UINT32,我认为它永远不会是4以外的任何值。
相关文章:
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- 在Raspbian上编译pybind11测试用例时出现致命错误
- 致命错误:特征/密集:VSC 中没有此类文件或目录
- v8::HandleScope::CreateHandle() # 中的致命错误无法在没有 HandleScope 的情
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- /usr/include/c++/7/cstdlib:75:15:致命错误:stdlib.h:没有这样的文件或目录 #i
- 代码::块C++使用 MacOS 编译 Mojave : 致命错误: sys/cdefs.h: 没有这样的文件或目录
- 致命错误:找不到'boost/uuid/uuid.hpp'文件
- 致命错误 C1001 :vs2017 15.8.4 的内部错误(编译器文件"msc1.cpp",第
- 链接:致命错误LNK1104:无法打开文件"python37_d.lib"
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- 多次调用本机方法时出现致命错误
- 在 Windows 10 下使用 GTest 的 CMake - 致命错误 LNK1104:无法打开文件"gtest.lib",但存在调试"gtestd.lib"
- NMAKE:致命错误 U1077:cl.exe 和 nmake.exe 返回代码'0x2'
- 【MacOSX 10.15.1】使用 odb 生成数据库,致命错误:wchar.h:没有这样的文件或目录 #include < wchar.h>
- 未知C++错误:致命错误:glibc检测到无效的stdio句柄
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- C++致命错误C1017