我正在开发一个简单的 C++ 程序,但很难理解我遇到的编译器错误。该问题是由我尝试从基类创建派生类引起的。我在下面发布了具有相同结构的代码,但更改了名称。
基类.h
#ifndef BASECLASS_H
#define BASECLASS_H
class BaseClass {
public:
BaseClass(void);
virtual int method1(void) = 0;
virtual int method2(void) = 0;
virtual float method3(void) = 0;
};
#endif // BASECLASS_H
派生类.h
#ifndef DERIVEDCLASS_H
#define DERIVEDCLASS_H
#include "DerivedClass.h"
class DerivedClass: public BaseClass
{
public:
DerivedClass(void);
};
#endif // DERIVEDCLASS_H
派生类.cpp
#include "DerivedClass.h"
DerivedClass::DerivedClass(void)
{
}
int DerivedClass::method1(void)
{
// TODO
}
int DerivedClass::method2(void)
{
// TODO
}
float DerivedClass::method3(void)
{
// TODO
}
当尝试编译它时,我收到所有虚拟方法的以下错误:
no 'int DerivedClass::methodX()' member function declared in class 'DerivedClass'
一旦我在“DerivedClass.h”中声明这些方法,错误就会消失,因为编译器现在知道这些方法。
然而,我很困惑。为什么需要在 DerivedClass.h 中重新声明纯虚函数?当我 #include DerivedClass.h 时,它将自动包含 BaseClass.h,因此我假设我的 DerivedClass.cpp 应该完全了解这些方法。我做错了什么吗?
这是行不通的。您需要声明要定义的方法,无论它们是否重写虚拟方法。
这不仅仅是语言的不合理要求。如果没有这个,你将无法定义部分虚拟类,即,你可以有BaseSubtype
具有共同的实现method1()
但需要从它派生的类来实现method2()
and method3()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)