【发布时间】:2009-10-21 01:03:06
【问题描述】:
所以我有 2 个类,Bullet 和 Ship,它们相互依赖,因此循环包含。由于我将 Ship 的接口#included 到 Bullet 的接口中,显而易见的决定是将 Bullet 声明转发给 Ship。
但是,当我第一次尝试这个时,我仍然遇到编译器错误。我阅读了一些关于前向声明的内容,并意识到我正在使用 Ship 的一种方法构造 Bullet,并且 Bullet 的默认构造函数是成员初始化的,这(我可能错了)不起作用,因为前向类声明不起作用允许 Ship 查看接口中的定义(即成员初始化)。
所以我决定我可以放弃成员 init 并在 Bullet 的实现文件中定义构造函数,但是我仍然遇到循环依赖的相同问题。
特别是消息是invalid use of undefined type struct Bullet。
我可以将 Bullet 和 Ship 的界面放在同一个文件中,但这是最后的手段。感谢您提供有关此问题的任何帮助。谢谢。
这里是发生错误的地方:
case SDLK_UP: // Fire
{
Bullet(*this) fired_bullet; // Create bullet. Line where error occurs.
fired_bullet.Move(); // Move bullet
break;
}
Bullet 的默认构造函数接受正在发射子弹的 Ship 的参数,并且该代码位于 Ship 方法中。
【问题讨论】:
-
子弹肯定属于枪而不是船?
-
其实Ammunition不是更准确吗?
-
项目符号是显示在屏幕上的单个对象,所以不是。
标签: c++