Sam*_*ack 2 c++ casting visual-studio
我尝试在 Visual Studio 2013 中构建 CRF++ 并在最后一行出现此错误:
array_[begin + siblings[i].code].base =
value_ ?
static_cast<array_type_>(-value_[siblings[i].left]-1) :
static_cast<array_type_>(-siblings[i].left-1);
Run Code Online (Sandbox Code Playgroud)
错误 C4146:一元减运算符应用于无符号类型,结果仍然无符号
具体来说,它在 darts.h,第 189 行。
我在 Visual Studio 2015 中再次构建,然后没有错误。
如何在 Visual Studio 2013 中解决此问题?
C4146 不应该是错误。这只是一个警告。如果您将其视为您的案例中的错误,则意味着有人以这种方式对其进行了配置,很可能是无意的。这没有任何意义。
查找并撤消将其变成错误的更改。然后,您可以根据需要禁用它。
小智 6
对于其他人,我想添加另一个答案,以防他们像我一样偶然发现那个错误。
即使在我的编译器中关闭了“作为错误的威胁警告”,我也必须在向我#pragma warning(disable:4146)显示错误的头文件中编译我的项目。对你来说,它应该在darts.h里面
请注意在我的项目中全局禁用警告不起作用(编译器/wd4146),直接在头文件中需要 pragma 行。
尝试这个:
int tmp = static_cast<int>(siblings[i].left);
array_[begin + siblings[i].code].base =
value_ ?
static_cast<array_type_>(-value_[siblings[i].left]-1) :
static_cast<array_type_>(-tmp - 1);
Run Code Online (Sandbox Code Playgroud)