错误 C4146:一元减运算符应用于无符号类型,结果仍然无符号

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 中解决此问题?

AnT*_*AnT 7

C4146 不应该是错误。这只是一个警告。如果您将其视为您的案例中的错误,则意味着有人以这种方式对其进行了配置,很可能是无意的。这没有任何意义。

查找并撤消将其变成错误的更改。然后,您可以根据需要禁用它。


小智 6

对于其他人,我想添加另一个答案,以防他们像我一样偶然发现那个错误。

即使在我的编译器中关闭了“作为错误的威胁警告”,我也必须在向我#pragma warning(disable:4146)显示错误的头文件中编译我的项目。对你来说,它应该在darts.h里面

请注意在我的项目中全局禁用警告不起作用(编译器/wd4146),直接在头文件中需要 pragma 行。


Ale*_*ynh 2

尝试这个:

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)