如何在Derived
课程中使用Base
课程?
编辑2:
在main中调用virtual void move(Derived1 &race);
时,它不会编译,但会抛出Derived1 is not found
的错误。当我在没有Derived1
类对象的情况下调用函数时,它会进行编译,但函数似乎没有做任何事情。是否可以使该功能起作用?
编辑:
基础课程
class Base {
protected:
int x, y;
int moves;
char name;
bool free;
public:
Base();
virtual void move(Derived1 &race);
};
派生类1
class Derived1 : public Base {
private:
const int x = 10;
const int y = 60;
Base ***track;
public:
Derived1(int x = 10, int y = 60);
void printBoard();
Base ***getArray() const;
~Derived1();
void move{}
};
派生类2
class Derived2 : public Base {
public:
Derived2();
Derived2(int x, int y);
void move(Derived1& race);
};
导出2的void move()函数
它检查阵列中的障碍物。如果找到自由空间,它会移动到那里。代码非常糟糕,因为我还没有完成它,只是一个临时代码才能让一切顺利进行。
void Derived2::move(Derived1& race) {
if (race.getArray()[x][y + 1]->getFree() == true) {
delete[] race.getArray()[x][y];
race.getArray()[x][y] = new Base();
}
if (race.checkFreeY(x, y + 1, 3) == true) {
delete[] race.getArray()[x][y + 4];
race.getArray()[x][y + 4] = new Derived2(x, y + 4);
moves++;
}
else if (race.checkFreeX(x, y + 1, 3) == true) {
delete[] race.getArray()[x + 3][y + 1];
race.getArray()[x + 3][y + 1] = new Derived2(x + 3, y + 1);
moves++;
}
else {
moves++;
}
}
这项任务是在每个其他派生类中使用virtual move()
函数进行比赛,该对象会在具有障碍物的2D数组中移动对象。
编辑3:
我试图制作的电话:
Derived1 track;
track.fillTrack();
track.genBushes();
track.genRacers();
track.getArray()[0][0]->move(track);
执行此操作时,我会收到以下错误:
syntax error: identifier 'Derived1'
'void Base::move(Derived1&)': overloaded member function not found in 'Base'
"void Base::move(<error-type> &race)"
在Base
中编辑移动功能,如下virtual void move() {}
并尝试调用track.getArray()[0][0]->move();
我收到以下错误:
too few arguments in function to call
答案 0 :(得分:0)
在定义Base
之前,您需要说
class Derived1;
这将使移动声明有效:
virtual void move(Derived1 &race);
您需要提供Base::move
和Derived1::move
的定义(您可以通过将其标记为纯虚拟来删除对Base::move
的需求。)