扩展类所需包含中的不一致性

Inconsistency in required includes for extending classes?

本文关键字:不一致性 包含中 扩展      更新时间:2023-10-16

这更多的是当我觉得它不应该工作时的情况。我不太确定这是否属于本网站的通常权限,但我对它很好奇,所以我想问一下也无妨。

使用dev-c++ IDE,我正在制作一个非常流行的"制作ATM程序"的教程项目。其中包含包含所有成员和一组虚函数的基本Account类,以及用于扩展Account的Checking和Savings类,这些类具有特定于这些帐户类型的功能。

当我试图实现Checking.h as so;

#ifndef CHECKING_H
#define CHECKING_H
class Checking : public Account
{
private:
...

在第5行抛出一个"{之前预期的类名"错误(当然,在Account::*的每个实例中都抛出一个"作用域内未定义的对象"),直到包含Account.h。然而,这个简单的错误花了我一段时间才发现,因为我正在将文件与Savings.h进行比较,后者编译得很好,但似乎不需要相同的包含。上面的代码失败了,但下面的集合在它自己的Savings.h中,似乎工作得很好:

#ifndef SAVINGS_H
#define SAVINGS_H
class Savings : public Account
{
protected:
...

所以,我把所有的类作为单独的文件放在一个目录中,在我的项目中有两个派生类。两者都扩展相同的基类,都使用基类的成员,扩展基类的一些函数,并直接调用其他函数,但只有一个需要包含基类的.h来编译。有什么常见的猜测吗?

这个问题的一个可能的候选是您正在编译一个看起来像这样的文件:

#include "Account.h"
#include "Savings.h"
...

因为"Account.h"包含在" saving .h"之前,所以Account类定义出现在Savings类定义之前。所以没有问题。或者更确切地说,问题是隐藏的。"Savings.h"应该仍然包含"Account.h",即使在某些情况下问题似乎消失了。