Информация об изменениях

Сообщение Re: инициализировать переменную в конструкторе от 12.03.2025 21:42

Изменено 12.03.2025 21:48 xma

Re: инициализировать переменную в конструкторе
Здравствуйте, sergey2b, Вы писали:

S>Подскажите пожалуйста есть ли варианты инициализировать переменную в конструкторе


40 лет как под наркозом
я работал говновозом говнокодером


S>данный код генерирует ошибку error G99FBF662: field 'kWindowName_' is uninitialized when used here


гуглим "инициализация константы в конструкторе класса c++", находим

Конструкторы и инициализация объектов
https://metanit.com/cpp/tutorial/5.2.php

делаем выводы (навскидку должно получится что то такое)

  топорный вариант
class Viewer {

private:
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_(suffix.empty() ? "Video Viewer" : "Video Viewer" + " " + suffix){};

};


ну и варианты с оптимизацией универсальности (не гарантирую что работают, проверять лень) :

навскидку,

  с uniform-инициализацией (C++11)
class Viewer {

private:
const std::string kWindowName_Base{"Video Viewer"};
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_(suffix.empty() ? kWindowName_Base : kWindowName_Base + " " + suffix){};

};


если не заводится, можно по пробывать так

  с инициализацией в конструкторе
class Viewer {

private:
const std::string kWindowName_Base;
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_Base("Video Viewer"), 
kWindowName_(suffix.empty() ? kWindowName_Base : kWindowName_Base + " " + suffix){};

};


P.S.:

если что то не работает, то гугл и отладка в помощь
Re: инициализировать переменную в конструкторе
Здравствуйте, sergey2b, Вы писали:

S>Подскажите пожалуйста есть ли варианты инициализировать переменную в конструкторе


40 лет как под наркозом
я работал говновозом говнокодером


S>данный код генерирует ошибку error G99FBF662: field 'kWindowName_' is uninitialized when used here


гуглим "инициализация константы в конструкторе класса c++", находим

Конструкторы и инициализация объектов
https://metanit.com/cpp/tutorial/5.2.php

делаем выводы (навскидку должно получится что то такое)

  топорный вариант
class Viewer {

private:
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_(suffix.empty() ? "Video Viewer" : "Video Viewer" + " " + suffix){};

};


ну и варианты с оптимизацией универсальности (не гарантирую что работают, проверять лень) :

  с uniform-инициализацией (C++11)
class Viewer {

private:
const std::string kWindowName_Base{"Video Viewer"};
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_(suffix.empty() ? kWindowName_Base : kWindowName_Base + " " + suffix){};

};


если не заводится, можно по пробывать так

  с инициализацией в конструкторе
class Viewer {

private:
const std::string kWindowName_Base;
const std::string kWindowName_;

public:
Viewer(std::string suffix):
kWindowName_Base("Video Viewer"), 
kWindowName_(suffix.empty() ? kWindowName_Base : kWindowName_Base + " " + suffix){};

};


P.S.:

если что то не работает, то гугл и отладка в помощь