将 sf::Shape 与默认构造函数一起使用

Using sf::Shape with a default constructor

我想用 sf::Shape 创建一个 class 作为成员变量,但由于某些原因我不能在默认构造函数中设置它的参数,只能在 main.

不知道为什么,错误显示 "expression must have class type"。感谢任何可以提供帮助的人。

#include "stdafx.h"
#include <SFML/Graphics.hpp>


class SFshape : public sf::Shape
{

public:
    SFshape()
    {
        shape.setSize(sf::Vector2f(100, 100));


    }
private:
    sf::RectangleShape shape();

};

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML");


    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.display();
    }


    return 0;
}

这个sf::RectangleShape shape();看起来像一个函数,而不是一个对象。 所以看起来你正在尝试声明一个成员函数,而不是一个变量。因此,它说它不是 class 类型 .

此时你不应该调用任何构造函数。您只需要声明一个变量 - sf::RectangleShape shape;。请注意,这种语法 sf::RectangleShape shape() 不会调用默认构造函数... sf::RectangleShape shape 会调用。

每个成员都有一个无论如何调用的默认构造函数,除非它被放置在初始化列表中,但是你可以明确地做一些事情:

class SFshape : public sf::Shape
{
  public:
    SFshape() : shape() //invoke shape's default constructor explicitly
    {
        shape.setSize(sf::Vector2f(100, 100));
    }
  private:
    sf::RectangleShape shape; // declare a member variable
};

我想你是想这样做:

sf::RectangleShape shape;
// sf::RectangleShape shape(); <--- instead of this