【发布时间】:2023-04-06 04:28:01
【问题描述】:
我有两节课。
class A:
class B: public A
{
//new function
void setHint(...);
}
并且有结构数据。
typedef std::shared_ptr<A> window_ptr;
std::stack<window_ptr> m_windowsStack;
m_windowsStack.push(std::make_shared<A>("Hint"));
m_windowsStack.push(std::make_shared<B>("Game"));
并在堆栈中找到函数:
std::shared_ptr<A> WindowManager::findWindow(std::string title)
{
... return result;
}
并使用函数在堆栈中查找元素:
auto w = findWindow("Game"); //return element type B
w->setHint(window);
但事实证明,findWindow 函数返回 type A。我得到错误“'class A'没有名为'setHint'的成员
w->setHint(window);"
我需要将 A 类中的 setHint 函数声明为虚函数吗?如何让变量自动理解为 B 类型?
【问题讨论】:
-
只转换结果,即
auto w = findWindow("Game");->auto w = static_cast<B*>(findWindow("Game")); -
class A:是错误,请写真实代码。另外我不确定您是否打算将setHint用作可变参数 -
@M.M class A:{}这是抽象类,我的类很大,对于这个问题\函数有很多不必要的变量。 :)
标签: c++ c++11 inheritance virtual