【发布时间】:2013-09-12 08:15:38
【问题描述】:
我有一个名为 Token 的 父类
我有两个子类,ErrorToken 和 EndToken。 这些类中的每一个都需要能够创建另一个类的对象,并通过函数调用返回它。每个都有自己单独的头类。
所以,ErrorToken 需要能够创建新的 EndToken 对象并返回,而 EndToken 需要能够创建新的 ErrorToken 对象并返回。
在这方面取得成功的最佳方法是什么?如果它尽可能与交叉编译器兼容,我会更喜欢这样我不想使用一次编译指示。(但这基本上就是我要寻找的)。
理想情况下,我希望能够做这样的事情......
#ifndef ErrorToken
#include "ErrorToken.h"
#endif
但这似乎永远不会奏效(我猜那是错误的?有人可以帮我理解为什么吗?)。
我对前向声明的理解是它只适用于函数签名和指针(对吗?),所以我认为这不适用于我的情况,因为我需要它能够运行构造函数。 .或者编译器是否只需要知道构造函数在那一刻退出?
【问题讨论】:
-
在头文件中使用前向声明,并在实现文件中包含必要的头文件。
-
不支持
#pragma once,您打算使用哪些奇怪的编译器?我认识的每个编译器都支持它。 -
你确定需要使用循环依赖吗?
标签: c++ null polymorphism forward-declaration include-guards