【问题标题】:C++ a value of type "SnakeHead(*)()" cannot be used to initialize an entity of type "SnakeHead*"C++ 类型“SnakeHead(*)()”的值不能用于初始化“SnakeHead*”类型的实体
【发布时间】:2020-11-24 15:16:33
【问题描述】:

我在使用 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());

【问题讨论】:

  • 蛇头播放器1();

标签: c++ class sfml


【解决方案1】:

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

SnakeHead player1();

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

您可以使用 花括号 代替括号来创建 SnakeHead 对象 player1

SnakeHead player1{};

或者干脆去掉括号:

SnakeHead player1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 2022-01-25
    • 2016-05-17
    相关资源
    最近更新 更多