Salve a tutti sto passando da java a c++ e non capisco il problema che mi da il programma quando passo il puntatore dell'oggetto della classe player al costruttore della classe Animazione:
error C2143: syntax error: missing ';' before '*'
missing type specifier - int assumed. Note: C++ does not support default-int
questi errori si presentano sulla linea dove dichiaro il puntatore ad Animation
codice:
#pragma once
#include "Entity.h"
#include "MapManager.h"
#include "Animation.h"
class Player : public Entity
{
public:
Player(std::string name, float x, float y, float w, float h, int life, MapManager mm);
~Player();
sf::Thread thread;
bool vivo;
void run();
bool collides(Entity*);
void setDeltaTime(double);
MapManager _mm;
Tile* getUnderPlayerTile(Tile*);
Animation* anim; //<---
double deltaTime;
double totalTime = 0.0;
bool go = true;
};
questo errore me lo da sul prototipo del costruttore:
error C2061: syntax error: identifier 'Player'
questi 3 errori me li da sulla dichiarazione del puntatore alla classe Player
error C2143: syntax error: missing ';' before '*'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
codice:
#pragma once
#include <SFML/Graphics.hpp>
#include "Player.h"
class Animation
{
public:
//nx frame asse x
//ny frame asse y
Animation(Player* player, int w, int h, int nx, int ny); //<---
~Animation();
void nextFrame();
private:
int _w, _h, _nx, _ny;
int actualX, actualY;
Player* _player; //<---
};
questo � il costruttore nel file Animation.cpp:
codice:
Animation::Animation(Player* player, int w, int h, int nx, int ny) : _player(player), _w(w), _h(h), _nx(nx), _ny(ny)
{
actualX = 0;
actualY = 0;
_w /= nx;
}
questo � il costruttore della classe player, dove passo un puntatore di Player al puntatore di Animazione:
codice:
Player::Player(std::string name,
float x, float y, float w, float h,
int life, MapManager mm)
: _mm(mm), Entity(name, x, y, w, h, life), thread(&Player::run, this)
{
_mm = mm;
std::cout << "Player created\n";
vivo = true;
anim = new Animation(this, w, h, 10, 1);
thread.launch();
}
qualcuno sa spiegarmi come risolvere, sto provando a fare qualcosa con le librerie SFML ma non capisco perch� non vada, prima avevo passato direttamente lo sprite al costruttore di Animazione e funzionava ma poi avrei dovuto aggioranrlo e usare il return non essendo un puntatore quindi e per fare prima lo ricavo dal puntatore di player e tramite refernza lo modifico:
codice:
void Animation::nextFrame() {
//actualX � la posizione da dove leggere la texture
actualX = (actualX + _w) % (_nx*_w);
//ricavo un puntatore allo sprite dell'oggetto di player
sf::Sprite* sprite = _player->getSpritePointer();
//cambio frame dello spritesheet
sprite->setTextureRect(sf::IntRect(actualX, 0, _w, _h));
}
grazie in anticipo