#include <SFML/Graphics.hpp>
class pngg:
{
public:
Texture texture;
Sprite sprite;
sf::Vector2f targetSize(GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN));
pngg(string way)
{
}
};
Ругается на Vector2f хотя если не в классе писать все ок
P.SS когда выносишь вызов в конструктор пишет:"вызов объекта типа класса без соответствующей функции operator() или функций преобразования указателя в функцию" Почему?
class pngg
{
public:
Texture texture;
Sprite sprite;
sf::Vector2f targetSize;
pngg(string way)
{
targetSize(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));//ошибка
}
};
sf::Vector2f targetSize(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
является объявлением функции с невалидными агрументами
Для инициализации полей класса в теле класса (да и во всех остальных случаях тоже) следует использовать синтаксис direct list initialization:
sf::Vector2f targetSize{GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)};
Попробуйте так:
pngg(string way):targetSize(GetSystemMetrics(SM_CXSCREEN),
GetSystemMetrics(SM_CYSCREEN))
{
}
Непосредственно при объявлении поля в определении класса допускается только =
синтаксис инициализации или {}
синтаксис инициализации. Инициализация через ()
не допускается.
В вашем случае, например,
sf::Vector2f targetSize{ GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN) };
//или
sf::Vector2f targetSize = { GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN) };
// или
sf::Vector2f targetSize = sf::Vector2f(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
В последнем, громоздком, варианте мы используем ()
синтаксис, но через посредство =
синтаксиса. Иногда и это бывает нужно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab