Enum и их ценности - PullRequest
       11

Enum и их ценности

1 голос
/ 17 сентября 2009

Каким будет значение Field.Format ("% 04d", ErrorCode) в процедуре ниже, если AErrorCode - ERR_NO_HEADER_RECORD_FOUND_ON_FILE?

Где-то в файле .h:

enum AErrorCode
{
    ERR_UNKNOWN_RECORD_TYPE_CODE = 5001,
    ERR_NO_HEADER_RECORD_FOUND_ON_FILE,
    ERR_DUPLICATE_HEADER_RECORD_FOUND,

    ERR_THIRD_PARTY_LETTER_RECORD_HAS_A_ZERO_REFERRAL_AMOUNT = 5101,    

    ERR_CALL_OCA_UNKNOWN_PROBLEM = 5999
};

В некоторых процедурах:

void TADataset::SetErrorStatus(AErrorCode ErrorCode)
{
    NDataString Field;
    Field.Format("%04d", ErrorCode);
    AckRecord.SetField("oca_error_stat", "E");
    AckRecord.SetField("error_cd", Field);
}

Ответы [ 2 ]

4 голосов
/ 17 сентября 2009
 ERR_NO_HEADER_RECORD_FOUND_ON_FILE == 5002

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

2 голосов
/ 17 сентября 2009

Согласно стандарту C ++ 7.2 / 1:

<...> Если первый перечислитель не имеет инициализатора, значение соответствующей константы равно нулю. Определение перечислителя без инициализатора дает перечислителю значение, полученное путем увеличения значения предыдущего перечислителя на единицу.

Это означает, что ERR_NO_HEADER_RECORD_FOUND_ON_FILE равно ERR_UNKNOWN_RECORD_TYPE_CODE+1.

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