Есть C++ класс такого вида. У него есть приватное поле window. И надо бы его в конструкторе моего класса тоже инициализировать как положено. Но тут я натыкаюсь на проблему: просто так взять и присвоить, как это я сделал ниже, нельзя.
Вопрос: как можно?
renderer.hpp
#define RENDERER_H
class Renderer
{
public:
Renderer();
...
private:
sf::RenderWindow window;
...
};
#endif // RENDERER_H
renderer.cpp
Renderer::Renderer()
{
sf::ContextSettings contextSettings(24, 8, 2);
this->window = sf::RenderWindow(..., contextSettings);
...
}
Из вашего кода не видно, нужен ли вам этот contextSettings как самостоятельный именованный объект. Скорее всего не нужен. Тогда, например, так
Renderer::Renderer() : window{ ..., { 24, 8, 2 } }
{
...
}
или, если вам больше нравится,
Renderer::Renderer() : window(..., sf::ContextSettings(24, 8, 2))
{
...
}
Если же вам по какой-то причине все таки нужно (или хочется) отложить конструкцию sf::RenderWindow, т.е. все таки перенести ее в тело конструктора, то можно, например, сделать window указателем
std::unique_ptr<sf::RenderWindow> window;
и потом в конструкторе делать
Renderer::Renderer()
{
sf::ContextSettings contextSettings(24, 8, 2);
window = std::make_unique<sf::RenderWindow>(..., contextSettings);
...
}
А также начиная с С++17 вы можете использовать std::optional
std::optional<sf::RenderWindow> window;
и далее в конструкторе
Renderer::Renderer()
{
sf::ContextSettings contextSettings(24, 8, 2);
window.emplace(..., contextSettings);
...
}
Продвижение своими сайтами как стратегия роста и независимости