Вызов объекта из переданного класса - PullRequest
0 голосов
/ 10 мая 2018

Можете ли вы помочь мне, как вызвать объект в классе после передачи класса объектов.

Итак, у меня есть Game.cpp, в конструкторе которого я создаю все объекты.

Game.cpp

//CONSTRUCTOR
Game::Game(Sep::Interface &io, std::string config): config_(config)
{

  ... some other things ..
//creating objects
  Sep::Property Obstacle(Sep::Field::FieldType::WATER,"OBSTACLE", 'O', true, false, 10, 20);
  Sep::Property Street(Sep::Field::FieldType::WATER,"STREET", 'S', true, false, 20, 10);

};

Здесь Game.h, где вы можете увидеть его Consturctor Game.h

  class Game
  {
    public:
      //------------------------------------------------------------------------
      // Game constructor & destructor
      //
      Game(Sep::Interface &io, std::string config);
      ~Game() noexcept;

  };

Теперь у меня есть сборка класса, у которой есть метод Excute, и который имеет в качестве параметра класс Game и некоторый параметр в качестве вектора.

Мой вопрос, как мне вызвать методы объекта из заданного параметра Gameclass?

BUILD.h

  class Game;

  class Build : public Command
  {

    public:
      //------------------------------------------------------------------------
      // Constructor
    Build(){};

   //------------------------------------------------------------------------
    // Destructor
    ~Build() noexcept ;

     int execute(Game &game, std::vector<std::string> &params);
};

Я пытался с чем-то вроде этого, но я не буду работать :(: Build.cpp

int Build::execute(Sep::Game &game, std::vector<std::string> &params)
  {
    if(params.size() == 4 )
    {
      Street s;
          // OR
      game Streets s;
    }
  }

1 Ответ

0 голосов
/ 10 мая 2018

ОК, попробуйте, но я не уверен на 100%, действительно ли это ваша проблема:

Game.h:

template <typename T> void USE(const T&) {}

namespace Sep
{
    namespace Field
    {
        enum class FieldType { WATER };
    }

    class Property
    {
    public:
        Property(Field::FieldType, const char*, char, bool, bool, int,int);
        void SomeFunction();
    };
    class Interface;
}

class Command {
    virtual int execute(Game &game, std::vector<std::string> &params) = 0;
};

#include <string>
namespace Sep{

class Game
{
    public:
    //------------------------------------------------------------------------
    // Game constructor & destructor
    //
    Game(Sep::Interface &io, std::string config);
    ~Game() noexcept;

    std::string config_;
    Sep::Property Obstacle;
    Sep::Property Street;


};
} // namespace Sep

Game.cpp

namespace Sep
{

Game::Game(Sep::Interface &io, std::string config)
    : config_(config)
    , Obstacle(Sep::Field::FieldType::WATER,"OBSTACLE", 'O', true, false, 10, 20)
    , Street(Sep::Field::FieldType::WATER,"STREET", 'S', true, false, 20, 10)
{

    USE(io);
}

}

Build.h

#include "Game.h"
#include <vector>
namespace Sep
{

class Build : public Command
{

    public:
    //------------------------------------------------------------------------
    // Constructor
    Build(){};

//------------------------------------------------------------------------
    // Destructor
    ~Build() noexcept ;

    virtual int execute(Game &game, std::vector<std::string> &params) override;
};
}

Build.cpp:

#include "Build.h"
namespace Sep
{
int Build::execute(Sep::Game &game, std::vector<std::string> &params)
{
    if(params.size() == 4 )
    {
    game.Street.SomeFunction();
    }
}

}

Может быть, это поможет вам разобраться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...