将 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
我想用 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