【发布时间】:2016-07-01 17:17:46
【问题描述】:
我试图了解是否有办法为基类设置包含指令,但也能够访问在与基类不同的标头中定义的派生类。例如:
在 GenericObject.h 中:
class GenericObject {
/* whatever - shared properties and methods implemented in .cpp file */
}
在 Ball.h 中:
class Ball : public GenericObject {
/* whatever - implementation details are in the .cpp file */
}
现在在其他一些实现文件(我们称之为 main.cpp)中,我有 #included "GenericObject.h"。在 main.cpp 中,我希望能够访问 GenericObject 类的成员以及 Ball 类和 GenericObject 的任何其他派生类。从我目前的试验来看,如果我尝试将 Ball 标识符声明为 Ball * b; 并因此声明属于其类的任何成员,编译器将无法识别它。
这是因为我的#include'd "GenericObject.h" 文件还没有链接到有这个派生的 Ball 类供我访问吗?如果我"#include "Ball.h",我可以正确识别并使用 Ball 类,但我无法想象我应该包含 GenericObject 类的派生类的所有头文件,对吧?
如果我不得不猜测它是如何工作的,我猜想 GenericObject 类中 Ball 类的原型声明之类的东西将是朝着正确方向迈出的一步,但我不确定是否类原型甚至是一个东西。
感谢大家的阅读和任何反馈!
【问题讨论】:
-
你需要学习translation units的概念。简化的翻译单元是单个源文件及其所有包含的头文件。如果您没有包含正确的头文件,编译器将根本不知道您在该头文件中声明和定义的符号。
-
我提到我怀疑是这种情况,但我想确保我没有遗漏一些明显的东西或其他最佳方法。不过谢谢!
标签: c++ class inheritance