sf::Vector2f в классе можно ли?

211
13 июля 2021, 06:40
#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));//ошибка
}
};
Answer 1
sf::Vector2f targetSize(GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));

является объявлением функции с невалидными агрументами

Для инициализации полей класса в теле класса (да и во всех остальных случаях тоже) следует использовать синтаксис direct list initialization:

sf::Vector2f targetSize{GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN)};
Answer 2

Попробуйте так:

pngg(string way):targetSize(GetSystemMetrics(SM_CXSCREEN),
                            GetSystemMetrics(SM_CYSCREEN))
{
}
Answer 3

Непосредственно при объявлении поля в определении класса допускается только = синтаксис инициализации или {} синтаксис инициализации. Инициализация через () не допускается.

В вашем случае, например,

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));

В последнем, громоздком, варианте мы используем () синтаксис, но через посредство = синтаксиса. Иногда и это бывает нужно.