扩展类所需的不一致?
Posted
技术标签:
【中文标题】扩展类所需的不一致?【英文标题】:Inconsistency in required includes for extending classes? 【发布时间】:2014-06-11 01:51:47 【问题描述】:这更像是在我觉得不应该的情况下发生了一些事情。我不太确定这是否属于本网站的通常权限范围,但我对此很好奇,所以我认为询问不会有什么坏处。
使用 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来编译。任何常见的怀疑为什么会这样?
【问题讨论】:
#include
基本上是复制粘贴。浏览你的项目并解决它。
【参考方案1】:
问题的一个可能原因是您正在编译一个看起来像这样的文件:
#include "Account.h"
#include "Savings.h"
...
因为“Account.h”包含在“Savings.h”之前,所以 Account
类定义出现在 Savings
类定义之前。所以没有问题。或者更确切地说,问题是隐藏的。 “Savings.h”仍应包含“Account.h”,即使问题在某些情况下似乎消失了。
【讨论】:
我的 main.cpp 确实有#include "account.h" #include "checking.h" #include "savings.h"
?
@user3377275:这是个问题吗?
一半,抱歉。回报并没有完全达到我的预期。是的,我确实在项目中有一个文件,其标题包含这些内容,但我拥有所有三个文件,并且 checks.h 在列表中的 Saving.h 之前。我很好奇这是否改变了你的诊断,或者我的编译器只是在以神秘的方式运行。
@user3377275:除了你刚才提到的四个文件之外,还有其他文件吗?
@Benjamin_Lindley 一些需要的库 - 以上是关于扩展类所需的不一致?的主要内容,如果未能解决你的问题,请参考以下文章