C ++ значение типа «SnakeHead (*) ()» не может использоваться для инициализации объекта типа «SnakeHead *». - PullRequest
1 голос
/ 04 августа 2020

У меня небольшие проблемы с 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 Ответ

3 голосов
/ 04 августа 2020

Ваш следующий код не делает того, что вы ожидаете:

SnakeHead player1();

Приведенный выше код объявляет функцию player1(), которая не принимает аргументов и возвращает объект SnakeHead по значению. Это связано с самым неприятным синтаксическим анализом C ++ .

Вы можете использовать фигурные скобки вместо скобок для создания объекта SnakeHead, player1:

SnakeHead player1{};

Или просто убрать скобки вообще:

SnakeHead player1;
...