Błąd podczas wywoływania metody z klasy.

0

Witam po uporaniu się z problem uruchomieniem aplikacji korzystającej z SFML przystąpiłem do nauki tejże biblioteki. Podczas pisania klasy gracza wystąpił mały problem:

 
expected unqualified-id before '.' token

Występuje on w takich miejscach:

 
Player.moove(0, -0.35);

i

 
Player.setPosition(100,100);

Kod źródłowy:
main.cpp

#include "Game.h"
int main()
{
    Game Game;

    Game.start();
    return 0;
}
 

Game.h

#include <SFML/Graphics.hpp>
#include "Player.h"

class Game {
public:
    Game();
    ~Game();

    void start();

private:

    void draw();

    sf::RenderWindow window;
};

Game.cpp

 
#include "Game.h"

Game::Game()
{
    Player Player;
	window.create(sf::VideoMode(800,600),"");

}

Game::~Game()
{
}

void Game::start()
{

	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}
		if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
            Player.moove(0, -0.35);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
            Player.moove(0, 0.35);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
            Player.moove(-0.35, 0);
        if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
            Player.moove(0.35, 0);


		draw();
	}
}

void Game::draw()
{
	window.clear();
    Player.setPosition(100,100);
	window.display();
}

Player.h

 
#include <SFML/Graphics.hpp>

class Player
{
public:
	Player();
	~Player();

	void moove(float, float);
	void setPosition(int, int);

protected:
	int hp;

	sf::Texture _PTexture;
	sf::RectangleShape player;
};

Player.cpp

 
#include "Player.h"

Player::Player()
{
    player(sf::Vector2f(50, 50));

	_PTexture.loadFromFile("Face.png");
    player.setTexture( &_PTexture);

	hp = 100;
}

Player::~Player()
{

}

void Player::moove(float x, float y)
{
	player.move(x, y);
}

void Player::setPosition(int x, int y)
{
	player.setPosition(x, y);
}

2

Zacznij od nauki podstaw programowania obiektowego bo z kodu wynika że nie do końca to rozumiesz.
Masz na przykład konstruktor:

Game::Game()
{
    Player Player;
    window.create(sf::VideoMode(800,600),"");
}

gdzie pierwsza linijka tworzy LOKALNĄ ZMIENNĄ typu Player o nazwie Player (btw nadanie obiektom nazwy takiej samej jak klasa to proszenie sie o guza). Ale tej zmiennej nigdzie nie zapisujesz. W szczególności: nie zapisałeś jej jako pola w klasie. Więc po wyjściu z konstruktora po prostu zniknie. Siłą rzeczy próby odwołania się do tego Player w innych metodach klasy Game spowoduje błąd bo czegoś takiego jak Player tam nie ma.

0

Zamykam

1 użytkowników online, w tym zalogowanych: 0, gości: 1