扩展类所需的不一致?

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 一些需要的库 - - 但没有其他文件,没有。在本教程的这个阶段,帐户、检查和保存都是我的课程。

以上是关于扩展类所需的不一致?的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC:取决于 url 扩展的不一致映射行为

仅加载给定类所需的模块

如何导入BASE64Encoder类所需的包

大型多类 NLP 分类的不平衡数据和样本量

一致性哈希算法很难?看完这篇全懂了

Parallel.ForEach 中的不一致 [关闭]