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 ';'
questo � il costruttore nel file Animation.cpp: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 della classe player, dove passo un puntatore di Player al puntatore di Animazione: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; }
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: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(); }
grazie in anticipocodice: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)); }

Rispondi quotando
