我是 C++ 的新手,我在将指针 vector 传递给对象时遇到问题。具体来说,问题是对象是方法所在类的子类。我收到一个错误:
'Player' was not declared in this scope
Player
是 Visual
的子类,在我的文件 Visual.cpp 中,我有以下函数,它也在我的头文件中声明。
bool Visual::DrawStatusInformation(Timer* timer, std::vector<Player*>* playerList) {
// Draw Info
}
我已经尝试在我的头文件中向前声明 class Player;
但我收到错误:
error: invalid use of incomplete type ‘struct Player’
error: forward declaration of ‘struct Player’
我认为问题在于我的定义是循环的,Player 扩展了 Visual 但 Visual 必须了解 Player 才能处理 Player 指针 vector 。
我的问题是:
如果可能,如何在父类(super class)方法的参数中使用子类?
最佳答案
我会考虑重新设计。继承为 is-a 关系建模,这反过来意味着在您的设计中,Player
is-a Visual
因此它知道如何DrawStatusInformation
其他Player
。这看起来合理吗?
您可能想要提供一个接口(interface),每个可绘制元素(包括 Player
)都可以实现该接口(interface),然后提供一个能够绘制任何可绘制元素的类型,尤其是潜在的 Player
。这样做你会打破循环依赖,设计会更合理。
请注意,这不是实现问题,而是设计问题。如果您真的觉得这是针对您的问题的最佳设计,那么您可以将前向声明与 Luchian 已经提到的包含结合起来。
关于c++ - 如何在父类(super class)方法的参数中使用子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100895/