Visualizzazione dei risultati da 1 a 3 su 3

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    residenza
    matrix
    Messaggi
    56

    [C++] Passaggio puntatore a oggetto nel costruttore

    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
    Ultima modifica di astolfo96; 12-05-2018 a 11:56

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.