有谁知道为什么会出现编译错误?我试过 VS 2005 和 Codewarrior:
class Parent {
protected:
int m_Var;
public:
Parent() : m_Var(0) {}
virtual ~Parent() {}
void PubFunc();
};
class Child : public Parent {
protected:
bool m_Bool;
public:
Child() : m_Bool(false) {}
virtual ~Child() {}
void ChildFunc();
};
void RemoveObj(Parent *& ppObj)
{
delete ppObj;
ppObj = 0;
}
int main()
{
Parent* pPObj = 0;
Child* pCObj = 0;
pPObj = new Parent();
pCObj = new Child();
RemoveObj(pPObj);
RemoveObj(pCObj);
return 1;
}
Visual Studio 说:
refptr.cpp(33) : error C2664: 'RemoveObj' : cannot convert parameter 1 from 'Child *' to 'Parent *&'
谢谢
最佳答案
RemoveObj 的 ppObj
参数是对 Parent* 的引用。如果 RemoveObj()
方法将指针替换为指向新的 Parent
对象的指针会怎样?当该方法返回您的 pCObj
Child*
时,将不再指向 Child
对象。
关于c++ - 对指针和 C++ 多态性的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/898955/