Итак, сначала я не знаю, правильно ли я это указал или правильно инициализировал. В DOCO.h я объявил его как enum, а затем создал переменную get и set. Я не знаю, насколько это необходимо для переменной, которая используется только в этом классе, но более поздняя версия, возможно, должна иметь к ней доступ в подклассе ????получить и установить переменную Enum внутри класса?
Таким образом, объект DOCO перемещается по 2D-массиву, я хочу иметь возможность изменять направление DOCO, позволяя ему иметь переменную enum. Во-первых, так как кодер я знаю, о чем я говорю, чтобы указать его на такие имена, как Север, Юг, Восток и Запад, но чтобы программа могла преобразовать его в целочисленное значение.
DOCO.h
{ частное: ... перечисление D_direction;
public:
...
enum D_direction getD_direction();
void setD_direction(enum D_direction dir);
}
DOCO.cpp
DOCO::DOCO(void)
{
enum D_direction *direction = 0;
D_energy = 0;
Mycell = NULL;
Nextcell = NULL;
}
enum D_direction DOCO::getD_direction()
{
enum D_direction dir;
//possible returns------
return *dir;
/*ERROR: no "*" matches these operands
operand types are: *DOCO::D_direction */
return D_direction *dir
/*enum DOCO::D_direction, DOCO *Other_proK;
ERROR: typename is not allowed*/
return dir;
/* DOCO::D_direction dir
ERROR: the return value type does not match the function type*/
}
void DOCO::setD_direction(enum D_direction dir)
{
enum D_direction {No_dir,NW,N,NE,E,SE,S,SW,W};
dir = static_cast<enum D_direction>(rand()%8+1);
//ERROR: a value type of "D_direction" can't be assigned to an
//entity of "DOCO::D_direction"
}
Так эта функция не совсем правильно, но это один из способов, который я хотел бы использовать перечисление D_direction * переменное направление. Я не думаю, что я делаю статический кастинг правильно.
bool DOCO::checkPosition(W_Cell *mc)
//should the argument be bool *pos? Don't know if this needs to be used?
{
//use the enum D_direction and pointer to next cell and determine
//current cell is border cell and move is possible
bool pos = false;
//do I need to instantiate the W_Grid?
while (row != -1 && col != -1)
{
if (*direction == NW)
{
if ((col == 0) || (row == 0)) //top row or 1st col no NW
pos = false;
else
pos = (D_World)grid[row-1][col-1].isDoccupied();
//can I set all of these true?
}
else if (*direction == N)
{
if (row == 0) //top row no N nextcell
pos = false;
else
pos = (D_World)grid[row-1][col+1].isDoccupied();
}
else if (*direction == NE)
{
if ((row == 0) || (col = width - 1)
//top row or last col no NE nextcell
pos = false;
else
pos = D_World::grid[row-1][col+1].getDoccupied();
}
else if (*direction == E)
{
if (col = width - 1) //last col no E nextcell
pos = false;
else
pos = (D_World)grid[row][col+1].isDoccupied();
}
else if (*direction == SE)
{
if ((row == (height -1))||col == (width - 1)))
//last row or col no SE nextcell
pos = false;
else
pos = (D_World)grid[row+1][col+1].isDoccupied();
//or can I say this is setNextcell(dOC);
}
else if (*direction == S)
{
if ((row == (height -1)) //last row no S nextcell
pos = false;
else
pos = (D_World)grid[row+1][col].isDoccupied();
//or can I say this is setNextcell(dOC);
}
else if (*direction == SW)
{
if ((row == (height -1) || (col == 0))
//last row or 1st col no SW nextcell
pos = false;
else
pos = (D_World)grid[row+1][col].isDoccupied();
//or can I say this is setNextcell(dOC);
}
else if (*direction == W)
{
if (col = 0) //1st col no W nextcell
pos = false;
else
pos = (D_World)grid[row][col-1].getDoccupied();
}
else
pos = false;
}
return pos;
}
Эта функция показывает, как я хочу использовать эту переменную. У меня нет ошибок при вызове переменной, но я не знаю, правильно ли это использует. void DOCO :: setNextcell (W_Cell * nc) { W_Cell * Nextcell = new W_Cell; D_World * grid = новый D_World;
if (Nextcell= grid-> getCell(row, col))
{
if (Nextcell -> getP_occupied())
/*how to get pointer to where cell is on grid?*/
this -> checkPosition(nc);
/*so this will point to grid->getCell(row,col)?*/
if (Nextcell->getD_occupied())
this -> getD_direction;
}
Nextcell = nc;
}
Так вот ошибки, которые, я думаю, я получаю с этим. В DOCO.h я не получаю никаких ошибок. Но в DOCO.cpp есть много ошибок. Я не знаю, что спросить, но вот что, по моему мнению, имеет отношение к моему вопросу. Я хочу использовать переменную enum для изменения направления DOCO вокруг блока в сетке. Я использую верхний (NW), верхний (N), верхний (NE), правый (E), нижний (SE), нижний (S), нижний (SW) и правый (W) в качестве моих направлений со строкой и col, чтобы установить направления. Надеюсь, это нелегкий глупый ответ, но, поскольку я не знаю, скажите, пожалуйста:
Переместить ваше определение перечислимого вне тела функции – Eugene