Так что я сделать игру, и у меня есть класс игрока, который имеет перечисление, для которых направление игрок сталкивается в настоящее время, вверх, влево и т.д.перечисления в разных классах несовместимы?
Player.h
#include "Fireball.h"
class Player
{
// Some stuff
Fireball fireballs;
void update();
private:
enum direction {up, left, down, right, upLeft, upRight, downLeft, downRight} playerDir;
};
У меня также есть класс Заклинаний, что я буду получить определенные заклинания, например, Fireball. Класс Spell имеет перечисление, которое совпадает с перечислением в классе Player, так как я хочу иметь возможность передать текущее направление игрока в качестве параметра, когда я обновляю экземпляр заклинания и перемещаю заклинание в этом направление.
Spell.h
class Spell
{
// Some stuff
protected:
enum direction {up, left, down, right, upLeft, upRight, downLeft, downRight};
};
.
Fireball.h
#include "Spell.h"
class Fireball : public Spell
{
public:
void updateFireballs(direction fireballDir);
};
.
Player.cpp
#include "Player.h"
void Player::update()
{
fireballs.updateFireballs(playerDir);
}
Когда я пытаюсь передать playerDir в качестве параметра функции updateFireballs, он жалуется, что не может преобразовать «игрока :: направление» к «Назови :: направлении».
Как передать перечисление из другого класса в качестве параметра функции в другом классе?
Почему вы хотите определить отдельные перечисления в обоих классах, особенно если вы хотите использовать их взаимозаменяемо? Было бы разумнее иметь общее определение за пределами обоих классов. –
Даже если вы определяете 'direction' вне класса Player, внутри вы все равно можете сказать' using direction = :: direction; 'сделать' Player :: direction' синонимом глобального 'direction'. Но, возможно, у вас есть что-то вроде «class Map» - направления обычно принадлежат картам. – MSalters