假设您有一个继承自超类A的子类B。您想要一个可以接受A或B的函数。

template <typename T>
void someFunc(T* pObj, bool someOtherArg)
{
    pObj->AnInheritMethod();
    if (pObj->IsASub())
    {
       pObj->ANonInhertMethod();
    }
}


当我对此进行编译(Visual Studio 6)时,我得到:

error C2065: 'pObj' : undeclared identifier


我要离开这里吗?

最佳答案

您不需要为此的功能模板;以下将很好用:

void someFunc(A* pObj)
{
    pObj->AnInheritMethod();
    if (B* pObjAsB = dynamic_cast<B*>(pObj))
    {
        pObjAsB->ANonInheritMethod();
    }
}


或者,如果您更喜欢使用IsASub()成员函数而不是dynamic_cast

void someFunc(A* pObj)
{
    pObj->AnInheritMethod();
    if (pObj->IsASub())
    {
        B* pObjAsB = static_cast<B*>(pObj);
        pObjAsB->ANonInheritMethod();
    }
}


除了缺少的返回类型,我在您的示例代码中没有发现任何明显错误;我没有安装Visual C ++ 6进行检查。

09-05 22:01