gpt4 book ai didi

c++ - 命名空间中的抽象方法

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:43 24 4
gpt4 key购买 nike

我有一个很奇怪的问题。

我有 3 个文件:
图.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: error: no ‘bool figure::king::canMove(const position&)’ member function declared in class ‘figure::king’

我该怎么办?非常感谢!

最佳答案

您需要在 class king声明该函数。

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

编辑:

All derived classes must implement abstract functions if I'm not mistaken

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

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

关于c++ - 命名空间中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15938285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com