使用sf :: Shape和默认构造函数

时间:2015-05-16 19:18:01

标签: c++ sfml

我想创建一个带有sf :: Shape作为成员变量的类,但由于某种原因,我无法在默认构造函数中设置它的参数,只能在main中。

任何想法,错误说"表达式必须有类型"。感谢任何有帮助的人。

#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;
}

2 个答案:

答案 0 :(得分:2)

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

此时你不应该调用任何构造函数。您只需要声明一个变量 - 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
};

答案 1 :(得分:1)

我认为你打算这样做:

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