Почему Вы используете определение типа при объявлении перечисления в C++?

Ничего не видно. Страница пуста и белая.

Также известна как Белая страница смерти или Белый экран смерти . Это происходит, когда отчет об ошибках отключен, и произошла фатальная ошибка (часто синтаксическая ошибка).

Если вы включили протоколирование ошибок, вы найдете конкретное сообщение об ошибке в своем журнале ошибок. Обычно это будет в файле php_errors.log, либо в центральном месте (например, /var/log/apache2 во многих средах Linux), либо в самом каталоге самого скрипта (иногда используется в среде совместного размещения).

Иногда может быть более простым временно отображать ошибки. На белой странице отобразится сообщение об ошибке. Будьте осторожны, потому что эти ошибки видны всем, кто посещает веб-сайт.

Это легко сделать, добавив в начале скрипта следующий код PHP:

ini_set('display_errors', 1); error_reporting(~0);

Код включит отображение ошибок и установит отчетность на самый высокий уровень.

Поскольку во время выполнения ini_set() он не влияет на синтаксические ошибки синтаксиса. Эти ошибки появятся в журнале. Если вы хотите также отобразить их на выходе (например, в браузере), вам необходимо установить директиву display_startup_errors на true. Сделайте это либо в php.ini, либо в .htaccess или любом другом методе, который влияет на конфигурацию перед временем выполнения .

Вы можете использовать те же методы для установки параметра log_errors и error_log , чтобы выбрать ваше собственное место в файле журнала.

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

Похожие вопросы:

Связанные ошибки:

173
задан Keith Pinson 5 September 2012 в 17:22
поделиться

4 ответа

В C объявляя Ваше перечисление первый путь позволяет Вам использовать его как так:

TokenType my_type;

при использовании второго стиля Вы будете вынуждены объявить свою переменную как это:

enum TokenType my_type;

, Как упомянуто другими, это не имеет значения в C++. Мое предположение - то, что или человек, который записал это, является программистом C в глубине души, или Вы компилируете код C как C++. Так или иначе это не будет влиять на поведение Вашего кода.

149
ответ дан Ryan Fox 23 November 2019 в 20:36
поделиться

Это - наследие C в C, если Вы делаете:

enum TokenType
{
    blah1   = 0x00000000,
    blah2   = 0X01000000,
    blah3   = 0X02000000
};

необходимо будет использовать его делающий что-то как:

enum TokenType foo;

, Но если Вы делаете это:

typedef enum e_TokenType
{
    blah1   = 0x00000000,
    blah2   = 0X01000000,
    blah3   = 0X02000000
} TokenType;

Вы будете в состоянии объявить:

TokenType foo;

, Но в C++, можно использовать только бывшее определение и использовать его, как будто это было в определении типа C.

95
ответ дан Michael Morris 23 November 2019 в 20:36
поделиться

Вы не должны делать этого. В C (не C++) Вы были обязаны использовать перечислимый Enumname для обращения к элементу данных перечислимого типа. Для упрощения его, Вас разрешили определение типа это к единственному типу данных имени.

typedef enum MyEnum { 
  //...
} MyEnum;

позволенные функции, берущие параметр перечисления, которое будет определено как

void f( MyEnum x )

вместо более длинного

void f( enum MyEnum x )

Примечание, что название имени типа не должно быть равно названию перечисления. То же происходит со структурами.

В C++, с другой стороны, это не требуется, поскольку перечисления, к классам и структурам могут получить доступ непосредственно как типы их имена.

// C++
enum MyEnum {
   // ...
};
void f( MyEnum x ); // Correct C++, Error in C
20
ответ дан David Rodríguez - dribeas 23 November 2019 в 20:36
поделиться

Пережиток от C.

6
ответ дан Tim 23 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: