所需的不一致包括扩展课程?

时间:2014-06-11 01:51:48

标签: c++ inheritance dev-c++

当我觉得不应该这样的事情时,这更像是一件事情。我不太确定这是否属于这个网站的通常范围,但我对它很好奇所以我觉得这个问题不会受到伤害。

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

当我尝试实现Checking.h时;

#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包含来编译。任何通常的嫌疑人为什么会这样?

1 个答案:

答案 0 :(得分:0)

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

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

...

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