Visual Studio 2019 выдает предупреждения о структурах, имеющих переменные без значений по умолчанию - PullRequest
0 голосов
/ 24 апреля 2019

Возьмите это определение структуры:

typedef struct tagReferenceMWB
{
    COleDateTime datStartDate;
    COleDateTime datEndDate;
    COleDateTime datFirstMonday;
    COleDateTime datLastMonday;
    CString      strFileMWB;
    WORD         wCount;
    bool         bReferenced;
    bool         bModified;

} S_REFERENCE_MWB;

Компилятор в VS2019 выдает предупреждение:

Warning

Warning   C26495  Variable 'CChristianLifeMinistryDefines::tagReferenceMWB::bModified' is uninitialized. Always initialize a member variable (type.6).    Meeting Schedule Assistant  d:\my programs\2019\meetschedassist\meeting schedule assistant\christianlifeministrydefines.h   348 
Warning   C26495  Variable 'CChristianLifeMinistryDefines::tagReferenceMWB::bReferenced' is uninitialized. Always initialize a member variable (type.6).  Meeting Schedule Assistant  d:\my programs\2019\meetschedassist\meeting schedule assistant\christianlifeministrydefines.h   348 
Warning   C26495  Variable 'CChristianLifeMinistryDefines::tagReferenceMWB::wCount' is uninitialized. Always initialize a member variable (type.6).       Meeting Schedule Assistant  d:\my programs\2019\meetschedassist\meeting schedule assistant\christianlifeministrydefines.h   348 

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

Обновление

На основании комментариев в предоставленном ответе я проверил настройки своего проекта:

C++ Language

Мой проект начал свою жизнь более 10 лет назад, и этот параметр выглядит как пусто . Я не знаю, значение этого пустого? Вот варианты, которые у меня есть:

C++ Language Options

Какое значительное влияние оказывает изменение значения на C ++ 14 или C ++ 17 ? IE. Повлияет ли это на какие операционные системы он может работать?

1 Ответ

3 голосов
/ 24 апреля 2019

В C ++ struct совпадает с class (за исключением модификатора доступа по умолчанию). Вы можете назначить значения по умолчанию, предоставив конструктор по умолчанию. Если вы используете C ++ 11, вы также можете использовать инициализаторы в классе для нестатических, неконстантных членов класса, например ::100100

typedef struct tagReferenceMWB
{
    // ...
    WORD         wCount{ 0 };
    bool         bReferenced{ false };
    bool         bModified{ false };

} S_REFERENCE_MWB;

или

typedef struct tagReferenceMWB
{
    // ...
    WORD         wCount{};
    bool         bReferenced{};
    bool         bModified{};

} S_REFERENCE_MWB;
...