首页 > 解决方案 > C++ 类型“SnakeHead(*)()”的值不能用于初始化“SnakeHead*”类型的实体

问题描述

我在使用 sfml 时遇到了一些麻烦,目前正在向我抛出作为标题的错误。

这是我创建的课程

#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());

标签: c++classsfml

解决方案


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

SnakeHead player1();

上面的代码声明了一个函数,player1()它不接受任何参数并按SnakeHead值返回一个对象。这是由于C++ 最令人烦恼的 parse

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

SnakeHead player1{};

或者干脆删除括号:

SnakeHead player1;

推荐阅读