扩展类所需包含中的不一致性
Inconsistency in required includes for extending classes?
这更多的是当我觉得它不应该工作时的情况。我不太确定这是否属于本网站的通常权限,但我对它很好奇,所以我想问一下也无妨。
使用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",即使在某些情况下问题似乎消失了。
相关文章:
- 我的项目中某些仅标头文件不能包含使用 CMake 和 Vscode 的"SFML/Graphics.hpp"
- 在包含中找不到 CMake 头文件
- 为什么不在 c++ 容器中实现包含函数
- C 标准中是否有任何计划来解决初始化器列表构造函数的不一致性
- CMake 编译器测试在 Android 中找不到包含目录
- 不理解 VS 中 HelloWorld 的错误,当包含std_lib来自 Stroustrup 的书时
- Visual Studio 2012 找不到包含目录中的文件
- 为什么Qt Creator在包含的路径中找不到包含的标头 - 即使qmake能够找到它们
- 仅在接口中包含标头,而不在实现中包含标头
- Eclipse 在子目录中找不到包含文件
- XCode4 不能在<>中包含头文件
- visual studio 2008中不能包含std头文件
- VS2015 在子目录中找不到包含标头
- C方法是否可能不能包含在C++项目中
- 不赞成包含include/Qt中的头文件
- 将头文件包含在头文件中,而不向包含程序公开其内容
- 为什么当我从向导在Visual Studio 2013中创建c ++类时,我不需要包含来自stdafx.h的标头
- 扩展类所需包含中的不一致性
- 在VS2012中不能包含ppltasks.h c++ 11头文件
- 为什么内联SQL不适合包含在应用程序中