C++ 类型 "SnakeHead(*)()"的值不能用于初始化类型 "SnakeHead*"的实体

标签 c++ class sfml

我在使用 sfml 时遇到了一些麻烦,并且当前向我抛出了标题错误。

这是我创建的类<​​/p>

#include <SFML/Graphics.hpp>

#ifndef SNAKEHEAD_H
#define SNAKEHEAD_H
class SnakeHead
{
private:
    int iPosX;
    int iPosY;
public:
    sf::RectangleShape snakeHead;
    SnakeHead();
    SnakeHead(int iX, int iY);
    bool wallCheck();
    bool collideCheck(int iX, int iY);
    void move(char cMovement);
    sf::RectangleShape createSquare();

};
#endif

这是主代码的重要部分

SnakeHead player1();
SnakeHead* player2 = player1;

顺便说一句,我这样做只是为了解决另一个问题。我得到的另一个错误是:“表达式必须具有类类型”

这里是类函数的重要部分

sf::RectangleShape SnakeHead::createSquare()
{
    snakeHead.setSize(sf::Vector2f(20.f, 20.f));
    snakeHead.setOrigin(0.f, 0.f);
    snakeHead.setPosition(iPosX, iPosY);
    snakeHead.setFillColor(sf::Color::Red);
    return snakeHead;
}

这里是主要代码的重要部分

window.draw(player1.createSquare());

最佳答案

您的以下代码没有达到您的预期:

SnakeHead player1();

上面的代码声明了一个函数 player1(),该函数不带参数并按值返回 SnakeHead 对象。这是由于C++'s most vexing parse .

您可以使用大括号而不是括号来创建SnakeHead对象,player1:

SnakeHead player1{};

或者直接删除括号:

SnakeHead player1;

关于C++ 类型 "SnakeHead(*)()"的值不能用于初始化类型 "SnakeHead*"的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63248350/

相关文章:

android - android上的简单XML框架,类属性

java - 行为类似于类字段的方法

c++ - 如何将实际的 sf::Sprite 对象保存在数组或 vector 中? C++

c++ - 共享库和静态库如何选择?

c++ - 使用 std::function 从无对象调用非静态方法

c++ - C++ 中函数的递归

c++ - 在 C++ 中打开常量是否合法?

javascript - 将 JS 类转换为真正的类

c++ - 从 C++ 中的数字输入动态创建矩阵

c++ - 将 VS 2012 迁移到 VS 2015 后 C++ 项目中的 Xmemory 错误