我有一个很奇怪的问题。
我有3个文件:
figure.h:
#ifndef FIGURE_H
#define FIGURE_H
namespace figure
{
class figure
{
public:
figure(position &p,color c);
virtual bool canMove(const position &p)=0;
virtual bool move(const position &p)=0;
protected:
color col;
position &p;
};
class king : public figure
{
};
};
#endif // FIGURE_H
king.h:
#ifndef KING_H
#define KING_H
#include "./figure.h"
namespace figure
{
class king : protected figure
{
};
}
#endif // KING_H
和king.cpp:
#include "king.h"
bool figure::king::canMove(const position &p)
{
}
我正在编译它: gcc -std = c11 -pedantic -Wall -Wextra
但问题是我收到了这个错误:
/src/figure/figure.h:24:45:错误:没有'布尔 figure :: king :: canMove(const position&)'声明的成员函数 class'figure :: king'
我该怎么办? 非常感谢你!
答案 0 :(得分:5)
您需要在class king
中声明该功能。
class king : public figure
{
virtual bool canMove(const position &p) override; // This was missing.
};
修改强>
如果我没弄错的话,所有派生类都必须实现抽象函数
这是不正确的。您可能希望课程king
也成为抽象类。与其他类成员一样,省略上面的声明告诉编译器king::canMove
应该从figure::canMove
继承 - 它应该仍然是纯虚拟的。
这就是你需要上述声明的原因。
答案 1 :(得分:0)
如编译器消息所示,您需要在declare
类中canMove(const position&)
king
。
答案 2 :(得分:0)
如错误消息所示,您尚未声明方法canMove()
。只需在课程king
namespace figure
{
class king : public figure
{
public:
bool canMove(const position &p);
};
}