Разве это не ошибка в книге «Язык программирования C ++» (4-е издание)? - PullRequest
4 голосов
/ 07 мая 2019

Я недавно просматривал это толстое руководство, чтобы иметь более ясное и глубокое понимание C ++, и я наткнулся на этот фрагмент кода в Разделе 8.4.2 (стр. 222), который я считаю ошибкой.

Вот код:

enum Traffic_light { red, yellow, green };
enum Warning { green, yellow, orange, red }; // fire alert levels

// error : two definitions of yellow (to the same value)
// error : two definitions of red (to different values)

Warning a1 = 7; // error : no int->Warning conversion
int a2 = green; // OK: green is in scope and converts to int
int a3 = Warning::green; // OK: War ning->int conversion
Warning a4 = Warning::green; // OK

void f(Traffic_light x)
{
    if (x == 9) { /* ... */ } // OK (but Traffic_light doesn’t have a 9)
    if (x == red) { /* ... */ } // error : two reds in scope
    if (x == Warning::red) { /* ... */ } // OK (Ouch!)
    if (x == Traffic_light::red) { /* ... */ } // OK
}

Не должно быть комментария к ошибке третьей строки, как это:

// error : two definitions of green (two different values)

В остальной части кода предполагается, что зеленый существует только в одной области перечисления.

1 Ответ

2 голосов
/ 07 мая 2019

Вы правы, и мы можем это увидеть, просто скомпилировав код (или пытаясь!).

Это не упоминается в исправлениях .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...