【问题标题】:Difficulties to update pointer with class methods使用类方法更新指针的困难
【发布时间】:2019-01-19 17:11:38
【问题描述】:

我目前正在从事一个学校项目,该项目包括开发 C++ RPG,尤其是使用 Qt。

在那之前一切都很顺利,除了我对角色的移动管理有问题,我自己解释一下。

我的角色有一组属性,包括一个 m_tile 属性,它是一个指向我也实现的 Case 对象的指针,以及一个包含 Case 对象的“Map_2”向量。关于方法,我已经实现了 go_up、go_down 等允许修改角色起始坐标的方法。想法是修改此函数,以便一方面在您进行移动时更新角色的坐标(例如调用 go_down),并且 m_tile 指针指向 Map_2 中包含的另一个对象。也就是说,Case Objects 包含使用 Qt 中的 QGraphicScene 显示的精灵的路径(地图上角色的位置)。

下面是代码

编译器返回我:

Personnage.cpp:244:22:错误:“Carte_2”未在此范围内声明

         m_tile = Carte_2[1];
                  ^~~~~~~

有人可以帮我处理向量并帮我解决问题吗?

提前致谢

#include "Personnage.h"
#include "Drop.h"
#include "Case.h"

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>


    // test_1 = Case(1, 0, 0,false, false,"plop");
    // test_2 = Case(1, 0, 0,false, false,"plop");

    // test_3 = Case(1, 0, 0,false, false,"plop");

    // Carte_2.push_back(test_1);
    // Carte_2.push_back(test_2);
    // Carte_2.push_back(test_3);


    //Case& nb_1 = Carte_2[1];

    //nb_1 = Case(99, 0, 0,false, false,"prout");
    //Case Carte_2[1] = Case(1, 0, 0,false, false,"test");
    //Case objet = Case(99, 0, 0,false, false,"prout");
    //Carte[1] = Case(99, 0, 0,false, false,"prout");
    //Carte_2[1] = objet;



    Personnage::Personnage(int id)
    {
        Id = id;
        m_vie = 100;                              
        m_degats= 10;//NArme.getDegats();
        m_X_pos = 0;
        m_Y_pos = 0;
        m_niveau = 1;
        m_experience = 0;
        m_puissance = 1;
        m_est_vivant = true;
        m_sprite = "Perso";
        //m_tile = new Case(1, 0, 0,false, false,"plop"); //
        std::vector<Case> Carte_2(2,Case(1, 0, 0,false, false,"plop")); // test de la carte pour deplacements
        Carte_2[1] = Case(99, 0, 0,false, false,"prout");

        m_tile = new Case(Carte_2[0]);

    };

    //Personnage::Personnage(int id, int vieAtStart, int degatsArmeAtStart)
    //{
    //   m_vie = vieAtStart;
    //   m_degatsArme = degatsArmeAtStart;
    //   persoId = id; 
    //   X_pos = 0;
    //   Y_pos = 0;
    //   niveau = 1;
    //   experience = 0;            
    // };

    void Personnage::recevoirDegats(int nombreDegats)
    {

     m_vie = m_vie - nombreDegats;      //IL faut rajouter une fonction coup critique
    };

    void Personnage::attaquer(Personnage &cible)
    {
    cible.recevoirDegats(m_degats);         //Attention aux attribut privés
    };

    void Personnage::guerir()
    {
         m_vie = m_vie + 40;

         if (m_vie > 100)
         {
            m_vie = 100;
         }    
    };

    void Personnage::regen()
    {
         m_vie = 100;

    };



    bool Personnage::estVivant()                //tout est dans le nom
    {
    if (m_vie > 0)
        return true;
    else             
        return false;
    };

    Personnage::~Personnage()                       //destructeur
    {

    };

    int Personnage::get_vie()
    {
       return m_vie; 
    };
    int Personnage::get_Id()
    {
       return Id; 
    };


    // void Personnage::se_blesser(int douleur)
    // {
    //      m_vie = m_vie - douleur;
    //      if (m_vie < 0)
    //         m_vie = 0;    
    // };
    int Personnage::get_degats()
    {
       return m_degats; 
    };

    int Personnage::get_X_pos()
    {
       return m_X_pos; 
    };

    int Personnage::get_Y_pos()
    {
       return m_Y_pos; 
    };

    int Personnage::get_niveau()
    {
       return m_niveau; 
    };

    int Personnage::get_experience()
    {
       return m_experience; 
    };

    int Personnage::get_puissance()
    {
       return m_puissance; 
    };
    bool Personnage::get_vivant()
    {
       return m_est_vivant; 
    };

    std::string Personnage::get_sprite()
    {
       return m_sprite; 
    };

    Case Personnage::get_case()
    {
       return *m_tile; 
    };

    void Personnage::set_case(Case & Case_cible)
    {
        m_tile = &Case_cible; 
    };

    void Personnage::change_niveau()
    {


        if ((m_experience > 0) && (m_experience < 110))
        {
            m_niveau = 1;
        }

        else if ((m_experience >= 110) && (m_experience < 650))
        {
            m_niveau = 2;
        }

        else if ((m_experience >= 650) && (m_experience < 1500))
        {
            m_niveau = 3;
        }

        else if ((m_experience >= 1500) && (m_experience < 2800))
        {
            m_niveau = 4;
        }

        else if ((m_experience >= 2800) && (m_experience < 4800))
        {
            m_niveau = 5;
        }

        else if ((m_experience >= 4800) && (m_experience < 7300))
        {
            m_niveau = 6;
        }

        else if ((m_experience >= 7300) && (m_experience < 10500))
        {
            m_niveau = 7;
        }

        else if ((m_experience >= 10500) && (m_experience < 14500))
        {
            m_niveau = 8;
        }

        else if ((m_experience >= 14500) && (m_experience < 19200))
        {
            m_niveau = 9;
        }

        else 
        {
            m_niveau = 10;
        }
    };

    void Personnage::go_up()
    {
        if ((m_Y_pos >0) &&(m_Y_pos<=30))
        {
            m_Y_pos = m_Y_pos-1 ; 

        }

        else
        {
            m_Y_pos = m_Y_pos;
        }
    };


    void Personnage::go_down()
    {
        if ((m_Y_pos >=0) &&(m_Y_pos<30))
        {
            m_Y_pos = m_Y_pos+1 ;
            m_tile = Carte_2[1]; 

        }

        else
        {
            m_Y_pos = m_Y_pos;
        }
    };

    void Personnage::go_left()
    {
        if ((m_X_pos >0) &&(m_X_pos<=30))
        {
            m_X_pos = m_X_pos-1 ; 

        }

        else
        {
            m_X_pos = m_X_pos;
        }
    };


    void Personnage::go_right()
    {
        if ((m_X_pos >=0) &&(m_X_pos<30))
        {
            m_X_pos = m_X_pos+1 ; 

        }

        else
        {
            m_X_pos = m_X_pos;
        }


    };



//////////////////////////////////////////////////////////

#include "Case.h"

#include <iostream>
#include <cstdlib>
#include <string>

    Case::Case(int numero, int X_loc, int Y_loc, bool combat, bool barriere,std::string image)
    {
        Numero = numero;
        m_X_localisation = X_loc; // voir protected
        m_Y_localisation = Y_loc; // a changer
        combat_ou_non = combat;
        obstacle = barriere;
        m_sprite = image;

    };

    //Personnage::Personnage(int id, int vieAtStart, int degatsArmeAtStart)
    //{
    //   m_vie = vieAtStart;
    //   m_degatsArme = degatsArmeAtStart;
    //   persoId = id; 
    //   X_pos = 0;
    //   Y_pos = 0;
    //   niveau = 1;
    //   experience = 0;            
    // };

    int Case::get_numero()
    {
       return Numero; 
    };

    int Case::get_X_localisation()
    {
       return m_X_localisation; 
    };

    int Case::get_Y_localisation()
    {
       return m_Y_localisation; 
    };

    bool Case::get_combat_ou_non()
    {
        return combat_ou_non;
    };

    bool Case::get_obstacle()
    {
        return obstacle;
    };

    std::string Case::get_sprite()
    {
       return m_sprite; 
    };

    Case::~Case()                       //destructeur
    {

    };



////////////////////////////////////////////////////////////



#include "Rand.h"
#include "Personnage.h"
#include "Guerrier.h"
#include "Magicien.h"
#include "Voleur.h"
#include "Squelette.h"
#include "Araignee.h"
#include "Gobelin.h"
#include "Boss.h"
#include "Case.h"
#include <time.h>
#include "Drop.h"
#include "Combat.h"
#include <vector>



//#include "Rand.h" // permet de faire le lien avec le .h 


#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;


int main()
{

    // std::vector<Case> Carte(2,Case(1, 0, 0,false, false,"plop")); // test de la carte

    // std::cout << " Numero de Case_1 : " << Carte[0].get_numero() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[0].get_X_localisation() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[0].get_Y_localisation() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[0].get_combat_ou_non() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[0].get_obstacle() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[0].get_sprite() << std::endl;

    // std::cout << "------------------------- " << std::endl;

    // Carte[1] = Case(1, 0, 0,false, false,"test");
    // std::cout << " Numero de Case_1 : " << Carte[1].get_numero() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[1].get_X_localisation() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[1].get_Y_localisation() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[1].get_combat_ou_non() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[1].get_obstacle() << std::endl;
    // std::cout << " Numero de Case_1 : " << Carte[1].get_sprite() << std::endl;

    // std::cout << "------------------------- " << std::endl;

    // test de la case de depart inclue dans personnage ///



    int A = rand_a_b(0,6);
    std::cout << "A vaut:" << A << std::endl;

    Guerrier Heros = Guerrier(1);
    Personnage Mechant = Personnage(2);
    Magicien Merlin = Magicien(3);
    Voleur Robin = Voleur(4);
    Squelette Oscar = Squelette(11);
    Araignee Lucifer = Araignee(12);
    Gobelin Marcel = Gobelin(13);
    Boss Jojo = Boss(14);

    std::cout << " Numero de Case initiale du personnage : " << Heros.get_case().get_numero() << std::endl;

    std::cout << "------------------------- " << std::endl;
    //Heros.set_case(Carte_2[1]);

    std::cout << " Numero de Case initiale du personnage : " << Heros.get_case().get_numero() << std::endl;
    std::cout << " Sprite initiale du personnage : " << Heros.get_case().get_sprite() << std::endl;

    // std::cout << "Id de Heros est:" << Heros.get_Id() << std::endl;
    // std::cout << "Vie de Heros est:" << Heros.get_vie() << std::endl;
    // std::cout << "Degats de Heros est:" << Heros.get_degats() << std::endl;
    // std::cout << "X_pos de Heros est:" << Heros.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Heros est:" << Heros.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Heros est:" << Heros.get_niveau() << std::endl;
    // std::cout << "Experience de Heros est:" << Heros.get_experience() << std::endl;
    // std::cout << "Puissance de Heros est:" << Heros.get_puissance() << std::endl;
    // std::cout << "Vivant de Heros est:" << Heros.get_vivant() << std::endl;
    // std::cout << "Sprite de Heros est:" << Heros.get_sprite() << std::endl;

    // std::cout << "Id de Mechant est:" << Mechant.get_Id() << std::endl;
    // std::cout << "Vie de Mechant est:" << Mechant.get_vie() << std::endl;
    // std::cout << "Degats de Mechant est:" << Mechant.get_degats() << std::endl;
    // std::cout << "X_pos de Mechant est:" << Mechant.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Mechant est:" << Mechant.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Mechant est:" << Mechant.get_niveau() << std::endl;
    // std::cout << "Experience de Mechant est:" << Mechant.get_experience() << std::endl;
    // std::cout << "Puissance de Mechant est:" << Mechant.get_puissance() << std::endl;
    // std::cout << "Vivant de Mechant est:" << Mechant.get_vivant() << std::endl;
    // std::cout << "Sprite de Mechant est:" << Mechant.get_sprite() << std::endl;


    Heros.charge(Mechant,Heros);

    // std::cout << "Id de Heros est:" << Heros.get_Id() << std::endl;
    // std::cout << "Vie de Heros est:" << Heros.get_vie() << std::endl;
    // std::cout << "Degats de Heros est:" << Heros.get_degats() << std::endl;
    // std::cout << "X_pos de Heros est:" << Heros.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Heros est:" << Heros.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Heros est:" << Heros.get_niveau() << std::endl;
    // std::cout << "Experience de Heros est:" << Heros.get_experience() << std::endl;
    // std::cout << "Puissance de Heros est:" << Heros.get_puissance() << std::endl;
    // std::cout << "Vivant de Heros est:" << Heros.get_vivant() << std::endl;
    // std::cout << "Sprite de Heros est:" << Heros.get_sprite() << std::endl;

    // std::cout << "Id de Mechant est:" << Mechant.get_Id() << std::endl;
    // std::cout << "Vie de Mechant est:" << Mechant.get_vie() << std::endl;
    // std::cout << "Degats de Mechant est:" << Mechant.get_degats() << std::endl;
    // std::cout << "X_pos de Mechant est:" << Mechant.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Mechant est:" << Mechant.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Mechant est:" << Mechant.get_niveau() << std::endl;
    // std::cout << "Experience de Mechant est:" << Mechant.get_experience() << std::endl;
    // std::cout << "Puissance de Mechant est:" << Mechant.get_puissance() << std::endl;
    // std::cout << "Vivant de Mechant est:" << Mechant.get_vivant() << std::endl;
    // std::cout << "Sprite de Mechant est:" << Mechant.get_sprite() << std::endl;

    // std::cout << "Id de Merlin est:" << Merlin.get_Id() << std::endl;
    // std::cout << "Vie de Merlin est:" << Merlin.get_vie() << std::endl;
    // std::cout << "Degats de Merlin est:" << Merlin.get_degats() << std::endl;
    // std::cout << "X_pos de Merlin est:" << Merlin.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Merlin est:" << Merlin.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Merlin est:" << Merlin.get_niveau() << std::endl;
    // std::cout << "Experience de Merlin est:" << Merlin.get_experience() << std::endl;
    // std::cout << "Puissance de Merlin est:" << Merlin.get_puissance() << std::endl;
    // std::cout << "Vivant de Merlin est:" << Merlin.get_vivant() << std::endl;
    // std::cout << "Sprite de Merlin est:" << Merlin.get_sprite() << std::endl;

    Merlin.BouleDeFeu(Mechant);

    // std::cout << "Id de Mechant est:" << Mechant.get_Id() << std::endl;
    // std::cout << "Vie de Mechant est:" << Mechant.get_vie() << std::endl;
    // std::cout << "Degats de Mechant est:" << Mechant.get_degats() << std::endl;
    // std::cout << "X_pos de Mechant est:" << Mechant.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Mechant est:" << Mechant.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Mechant est:" << Mechant.get_niveau() << std::endl;
    // std::cout << "Experience de Mechant est:" << Mechant.get_experience() << std::endl;
    // std::cout << "Puissance de Mechant est:" << Mechant.get_puissance() << std::endl;
    // std::cout << "Vivant de Mechant est:" << Mechant.get_vivant() << std::endl;
    // std::cout << "Sprite de Mechant est:" << Mechant.get_sprite() << std::endl;

    // std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    // std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    // std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    // std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    // std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    // std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    // std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    // std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Robin.sournoiserie(Mechant);

    // std::cout << "Id de Mechant est:" << Mechant.get_Id() << std::endl;
    // std::cout << "Vie de Mechant est:" << Mechant.get_vie() << std::endl;
    // std::cout << "Degats de Mechant est:" << Mechant.get_degats() << std::endl;
    // std::cout << "X_pos de Mechant est:" << Mechant.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Mechant est:" << Mechant.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Mechant est:" << Mechant.get_niveau() << std::endl;
    // std::cout << "Experience de Mechant est:" << Mechant.get_experience() << std::endl;
    // std::cout << "Puissance de Mechant est:" << Mechant.get_puissance() << std::endl;
    // std::cout << "Vivant de Mechant est:" << Mechant.get_vivant() << std::endl;
    // std::cout << "Sprite de Mechant est:" << Mechant.get_sprite() << std::endl;

    // std::cout << "Id de Oscar est:" << Oscar.get_Id() << std::endl;
    // std::cout << "Vie de Oscar est:" << Oscar.get_vie() << std::endl;
    // std::cout << "Degats de Oscar est:" << Oscar.get_degats() << std::endl;
    // std::cout << "X_pos de Oscar est:" << Oscar.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Oscar est:" << Oscar.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Oscar est:" << Oscar.get_niveau() << std::endl;
    // std::cout << "Experience de Oscar est:" << Oscar.get_experience() << std::endl;
    // std::cout << "Puissance de Oscar est:" << Oscar.get_puissance() << std::endl;
    // std::cout << "Vivant de Oscar est:" << Oscar.get_vivant() << std::endl;
    // std::cout << "Sprite de Oscar est:" << Oscar.get_sprite() << std::endl;

    Oscar.coup_de_femur(Robin);

    // std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    // std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    // std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    // std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    // std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    // std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    // std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    // std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Lucifer.morsure(Robin);

    // std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    // std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    // std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    // std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    // std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    // std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    // std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    // std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Marcel.coup_de_dague(Robin);

    // std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    // std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    // std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    // std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    // std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    // std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    // std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    // std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    // std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    // std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Jojo.coup_fatal(Robin);
    std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Drop(Robin,Jojo);

    std::cout << "Id de Robin est:" << Robin.get_Id() << std::endl;
    std::cout << "Vie de Robin est:" << Robin.get_vie() << std::endl;
    std::cout << "Degats de Robin est:" << Robin.get_degats() << std::endl;
    std::cout << "X_pos de Robin est:" << Robin.get_X_pos() << std::endl;
    std::cout << "Y_pos de Robin est:" << Robin.get_Y_pos() << std::endl;
    std::cout << "Niveau de Robin est:" << Robin.get_niveau() << std::endl;
    std::cout << "Experience de Robin est:" << Robin.get_experience() << std::endl;
    std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;
    std::cout << "Vivant de Robin est:" << Robin.get_vivant() << std::endl;
    std::cout << "Sprite de Robin est:" << Robin.get_sprite() << std::endl;

    Combat(Robin,Oscar);

    std::cout << "Puissance de Robin est:" << Robin.get_puissance() << std::endl;


}

【问题讨论】:

  • 欢迎来到 SO。抱歉,您的问题不适合这里。请阅读help center 了解原因,我们就是无法调试您的代码。您的错误非常基本,只是没有声明变量,仅此而已...
  • 你能只发布所需的最小示例吗?不确定 20 多条评论 std::couts 与该问题有什么关系。 getter/setter 也是如此
  • ...同时缺少头文件

标签: c++ class vector scope


【解决方案1】:

std::vector&lt;Case&gt; Carte_2 在你的构造函数中被声明为一个局部变量,所以当构造函数结束时这个变量会被永久删除。

所以Personnage::go_down() 无法访问它。我怀疑您希望 Carte_2 成为 Personnage class 的属性。

另外,下次请发个MCVE,请看https://stackoverflow.com/help/mcve

如果Carte_2 如您所评论的那样是一个全局变量,那么请执行以下操作:

const std::vector<Case>& Carte_2()
{
    static std::vector<Case> vect = { Case(1, 0, 0,false, false,"plop"),
                                      Case(99, 0, 0,false, false,"prout") };
    return vect;
}

然后,在Personnage::Personnage 中执行以下操作:

m_tile = &(Carte_2()[0]); // if m_tile is a Case*

在 Personnage::go_down() 中,执行:

m_tile = &(Carte_2()[1]); // if m_tile is a Case*

【讨论】:

  • 对不起,我只是想把问题说清楚,下次我会发布 MCVE。我之前曾尝试将向量设为全局变量,但它不允许我在声明向量后更改 Carte_2[1],即使使用 push_back 方法和空向量
  • @S.Gradit:你为什么要在m_tile = Carte_2[1] 的时候讨论修改向量?它没有任何意义。 Carte_2 应该是全局变量(非常糟糕的主意)、类的属性或它的静态成员。如果我的回答没有帮助,恐怕没有 MCVE 就帮不上什么忙了。
  • @S.Gradit:顺便说一句,在你的构造函数中你做m_tile = new Case(Carte_2[0]);而不是Personnage::go_down(),你做m_tile = Carte_2[1];,这没有意义。 m_tileCase 还是 Case*
  • m_tile 应该是一个指向 Case 对象的指针。 go_down 所做的坐标更改应该会修改 Carte_2 中指向的对象。例如,角色从 (0,0) 开始,m_tile 指向 Carte_2 的第一个元素,然后当角色移动到 (0,1) 时,m_tile 应该指向 Carte_2 的第二个元素去试试
  • 我终于能够修改您的建议以使其生效!谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多