我想创建一个以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;
}

===============>>#1 票数: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
};

===============>>#2 票数:1

我认为您打算这样做:

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

  ask by Joel Bevan translate from so

未解决问题?本站智能推荐:

1回复

链接到SFML 2会抛出对sf :: Window构造函数的未定义引用

我只想在我的新计算机上移动我的程序源并安装Codeblocks 12.11并按照SFMLCoder的最新指示自行编译SFML 2。 一切都很好。 当我尝试编译时: 我尝试了静态(在Buildoptions中定义了C :: B中的SFML_STATIC),动态和两个调试库。 但总是在
1回复

当我将形状的构造函数称为“ shape()”时,SFML不会绘制形状

除非我在成员初始化中执行此操作,否则我的玩家“矩形”将不会绘制: 即使我已经在构造函数定义中做到了这一点: 问题是我想使用std :: vector来存储许多形状并控制它们,但是在执行此操作时“不画图”将不起作用: 在标题中: 在执行中: 而且由于mPlay
1回复

使用删除的函数'sf :: RenderWindow&sf :: RenderWindow :: operator =(const sf :: RenderWindow&)'

我是C ++的新手,所以请放轻松。 我正在尝试使用sfml创建一个RenderWindow。 然后,在创建播放器时,该播放器的关联“窗口”对象将设置为先前创建的RenderWindow。 我的目的是能够从播放器对象中运行诸如window.draw()之类的窗口方法,即: 但是,
2回复

何时在构造函数中使用{}()

在Game.h ,我有一个名为Game的类: 然后,在Game.cpp ,我使用: 语法 也可以。 我的问题是:我为什么可以省略sf::VideoMode在第一种情况下,如果我这样做,为什么我必须使用{}为:视频模式的参数? 在第一种情况下使用()导致错误。
2回复

在派生构造函数中生成参数时,如何将其传递给默认构造函数?

我有一个名为RenderObject的类,它包含3个变量:位置,保存指向的数组长度的int以及指向“ Faces”数组的指针 Face只是一个拥有其类型(四边形或三角形),其颜色以及指向顶点数组(存储为Vector3f)的指针的类。 我的RenderObject类具有一个构造函数,该
1回复

如何在函数/方法中使用sf :: window

我想创建一个接受string的类,并在sfml中的框中给出该string 。 为了使绘图更容易,我制作了一个函数,该函数使用renderwindow的指针并用文本绘制框(我尚未实现Box),但是当我运行它时,出现错误,不允许这样做读这个 我已经尝试通过引用传递窗口,但是它没有用,结果是一
1回复

调用sf :: RectangleShapes绘制函数吗?

我有一组简单的课程。 其中之一是ButtonComponent ,在其中我基本上想在视觉方面使用sf::RectangleShape ,然后其余ButtonComponent将处理诸如事件侦听器之类的事情。 问题的形式是,如果我从父类中的sf::Drawable继承,则必须实现draw()
1回复

Ubuntu的SFML'无匹配函数可调用“ sf:SocketUDP :: Receive(sf :: Packet&,sf :: IPAddress&)”

当(可能是)错误发生时,我正在尝试编译我的SFML网络测试。 在SFML 1.6的参考中,SocketUDP具有我要使用的成员函数。 但是,在SFML 2.0的参考中,该功能已更改,现在需要一个额外的字段,即无符号short&remotePort。 即使我的版本是1.6,该库似
1回复

如何将sf :: RenderWindow传递给另一个函数?

假设我在C ++ SFML中有如下代码; 当我尝试编译这样的内容时,调试器发出一条错误消息,提示“试图引用已删除的函数”。 我现在知道不能将sf :: RenderWindow传递给另一个函数,那么有什么更好的方法呢?
1回复

sf :: Sound函数导致链接器错误

我最近开始使用SFML。 因此,我下载了该库的2.4.2 Win64版本,并开始尝试这些示例。 到目前为止,我遇到的唯一问题是在sf :: Sound对象上调用play / pause / stop时发生链接器错误。 例如玩游戏,我得到: main.obj:-1:错误:LNK20