我想创建一个带有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;
}
答案 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