我创建了一个抽象类和一个具体的子类:
//bca.h
#include <string>
class bca {
public:
virtual std::string get_virtual_year() const = 0;
};
//bca_interface.h
#include "bca.h"
class bca_interface : public bca {
public:
std::string get_virtual_year() const override;
};
//bca_interface.cpp
#include "bca_interface.h"
std::string bca::get_virtual_year() const override {
return "";
}
当我使用g ++编译bca_interface.cpp
时,我得到:
error: virt-specifiers in ‘get_virtual_year’ not allowed outside a class definition
std::string bca::get_virtual_year() const override {
答案 0 :(得分:4)
错误说明了一切
error: virt-specifiers in ‘get_virtual_year’ not allowed outside a class definition
您不能将 virt-specifier (override
和final
)放在类定义之外。您只能将该说明符放在类定义中的函数声明上。例如explicit
,static
,virtual
,...
标头中的位置正确。在您的源代码中,只需将其删除即可。
答案 1 :(得分:3)
override
关键字仅在成员的声明中使用(在类定义中,如错误消息所述)。就在这里。
该定义并不关心它是否是一个覆盖的实现,只是它具有相同的签名(包括const
)。
//bca_interface.h
class bca_interface : public bca {
public:
private:
std::string get_virtual_year() const override;
// ^^^^^^^^ correct
};
//bca_interface.cpp
std::string bca_interface::get_virtual_year() const {
// ^^^ not required (or allowed) here
return "";
}
当然,如果您的声明也是定义,那么欢迎override
。