SetCommand takes a reference to an ICommand object. (You can think of references as if they were pointers with different synax for using them, for now). Assuming ICommand is a parent class of MoveCommand, you can pass a reference of MoveCommand (e.g. cmdRight) to GameEngine::SetCommand(). In SetCommand() you will have to convert the type of the passed reference to MoveCommand in order to be able to assign the value to command -- otherwise the actual object might have a type that is another child of ICommand.
Try this:
void GameEngine::SetCommand(ICommand& cmd) {
try {
MoveCommand& mcmd = dynamic_cast<MoveCommand&>(cmd);
command = mcmd;
} catch (const std::bad_cast& e) {
std::cout << "Wrong command passed: move command expected" <<
" (" << e.what() << ")" << std::endl;
}
}
Note: if you do not specifically need a MoveCommand in GameEngine, you could declare command of type ICommand* and use the passed-in values via the ICommand interface. You will have to dynamically allocate and de-allocate the object, though, so if you are not familiar with that topic, try the above code.