简体   繁体   中英

Passing an enum of a structure to other functions and assigning the values

I'm writing a Snake game in C++, I have a structure for a section of the snake which contains, data such as x position, y position, direction etc.

I have it all working, setting all the data to integers, I just would like to change some of the data types to enum's because it looks a lot neater and easier to understand. I've tried lots and looked online but I can't seem to find anything.

This is some of the Structure:

struct SnakeSection
{
    int snakePosX;
    int snakePosY;

    int SectionType;
    // Tail = 0, Body = 1, Head = 2

    int animation;

  enum Direction
  {
      Up = 0,
      Right = 1,
      Down = 2,
      Left = 3
  };
};

My attempt at trying to pass one of the Directions to another function:

void PlayerSnake::createSnake()
{
// Parameters are direction, x and y pos, the blocks are 32x32
addSection(SnakeSection::Direction::Right, mStartX, mStartY, 2);
}

Then I tried setting the direction to the one passed in in that function:

void PlayerSnake::addSection(SnakeSection::Direction dir, int x, int y, int type)
{
    //Create a temp variable of a Snake part structure
    SnakeSection bufferSnake;

    bufferSnake.Direction = dir;
    bufferSnake.animation = 0;

    //is it head tail or what? This is stored in the Snake section struct
    //TODO Add different sprites for each section
    bufferSnake.SectionType = type;

    //assign the x and y position parameters to the snake section struct buffer
    bufferSnake.snakePosX = x;
    bufferSnake.snakePosY = y;

    //Push the new section to the back of the snake.
    lSnake.push_back(bufferSnake);
}

error: invalid use of enum SnakeSection::Direction

Thanks

The error on the following line ...

bufferSnake.Direction = dir;

... is reasoned, that besides declaring the enum type, you'll still have to have a class member variable to store it:

struct SnakeSection
{
    int snakePosX;
    int snakePosY;

    int SectionType;
    // Tail = 0, Body = 1, Head = 2

    int animation;

  enum Direction
  {
      Up = 0,
      Right = 1,
      Down = 2,
      Left = 3
  };

  Direction direction_; // <<<<<<<<<<<<<< THAT'S WHAT'S MISSING IN YOUR CODE
};

And refer to

bufferSnake.direction_= dir; // <<<<<<<<<<<<<< THAT'S THE MEMBER VARIABLE YOU'LL 
                             //                HAVE TO REFER TO!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM