0

我有一个很奇怪的问题。

我有 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

国王.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' 中声明的 'bool figure::king::canMove(const position&)' 成员函数</p>

我应该怎么办?非常感谢!

4

3 回答 3

5

需要在class king.

class king : public figure
{
  virtual bool canMove(const position &p) override;  // This was missing.
};

编辑:

如果我没记错的话,所有派生类都必须实现抽象函数

这是不正确的。您可能希望类king也是一个抽象类。与其他类成员一样,省略上面的声明会告诉编译器king::canMove应该继承自figure::canMove- 它仍然应该是纯虚拟的。

这就是为什么你需要上面的声明。

于 2013-04-10T23:34:00.333 回答
0

如编译器消息所示,您需要declare canMove(const position&)king类中。

于 2013-04-10T23:34:35.713 回答
0

如错误消息所述,您尚未声明方法canMove()。只需在课堂上声明即可king

namespace figure
{
   class king : public figure
   {
   public:
       bool canMove(const position &p); 
   };
}
于 2013-04-10T23:35:00.750 回答