C++ 从基到派生的静态转换后找不到成员函数

C++ 从基到派生的静态转换后找不到成员函数,c++,inheritance,polymorphism,c++14,C++,Inheritance,Polymorphism,C++14,我正在尝试构建一个名为“step”的函数,它接受一个基类指针并执行一些操作。目前,我正在使用一个虚拟基类来启用一个公共接口 #include <iostream> using namespace std; class gym_action //dummy base { public: virtual ~gym_action(){} }; template<typename T> class action_helper : public gym_action

我正在尝试构建一个名为“step”的函数,它接受一个基类指针并执行一些操作。目前,我正在使用一个虚拟基类来启用一个公共接口

#include <iostream>

using namespace std;

class gym_action //dummy base
{
public:
    virtual ~gym_action(){}
};

template<typename T>
class action_helper : public gym_action
{
    public :
        action_helper(T a) : action_item(a){}
        T get_action() {return action_item;}

    private:
       T action_item;

};

void step(gym_action* act)
{
    act = dynamic_cast<action_helper<int>*>(act);
    cout<<act->get_action()<<endl;
}

int main()
{

    action_helper<int> a(2);
//I will have more action_helper instansiations, like action_helper<Eigen::VectorXf> etc
    cout<<a.get_action()<<endl;
    step(&a);

}
#包括
使用名称空间std;
课堂体操动作//虚拟基地
{
公众:
虚拟~gym_action(){}
};
样板
集体行动帮助:公共健身房行动
{
公众:
行动(ta):行动(a)
T get_action(){return action_item;}
私人:
行动项目;
};
无效步骤(体操动作*动作)
{
act=动态施法(act);

cout即使在
dynamic\u cast
之后,变量
act
仍然是
gym\u action*
类型。因此,您可能无法对其调用派生类成员函数

使用新变量

auto temp = dynamic_cast<action_helper<int>*>(act);
if ( temp != nullptr )
{
   cout << temp->get_action() << endl;
}
auto-temp=dynamic_-cast(act);
如果(温度!=nullptr)
{
无法获取_操作()