0

我正在使用旧代码,每次-1使用较新的 C++ 标准编译时都会出错。

constant expression evaluates to -1 which cannot be narrowed to type 'char' [-Wc++11-narrowing]

这是片段代码

typedef struct {
    //short     len;
    //unsigned short cw;
    char        x, y, v, w;
} testStruct;

const testStruct testArr[] = {
    {   1,  -1,   0,   0},
    {  -1,   1,   0,   0},
    {   0,   0,  -1,   1},
    {   0,   1,  -1,   0},
    {   0,  -1,   1,   0},
    {   0,   0,   1,  -1},
    {   1,   1,   0,   0},
    {   0,   0,  -1,  -1},
    {  -1,  -1,   0,   0},
    {   0,  -1,  -1,   0},
    {   1,   0,  -1,   0},
    {   0,   1,   0,  -1},
    {  -1,   0,   1,   0},
    {   0,   0,   1,   1},
    {   1,   0,   1,   0},
    {   0,  -1,   0,   1},
    {   0,   1,   1,   0},
    {   0,   1,   0,   1},
    {  -1,   0,  -1,   0},
    {   1,   0,   0,   1},
    {  -1,   0,   0,  -1},
    {   1,   0,   0,  -1},
    {  -1,   0,   0,   1},
    {   0,  -1,   0,  -1}
};

我尝试将代码和括号更改为以下警告:缩小转换 C++11的括号,但我仍然遇到相同的错误。有没有不恢复到旧 C++ 标准的解决方案?

4

1 回答 1

1

要覆盖编译器,您必须编写static_cast<char>(-1)

更新的 C++ 标准不再可以接受某些事情,因此您必须找到一种更现代的方式来做事......

于 2021-01-22T13:52:24.487 回答