我有这段代码,
class IFoo
{
public:
IFoo(){}
virtual ~IFoo(){}
virtual void fooFunc() = 0;
};
class Foo : public IFoo
{
public:
Foo(){}
virtual ~Foo(){}
virtual void fooFunc(){/*impl*/}
};
class Poop : public IFoo
{
public:
Poop(){}
virtual ~Poop(){}
virtual void fooFunc(){/*impl*/}
};
class Bar
{
public:
Bar(){}
~Bar(){}
void setFoo(Foo* foo){/*impl*/}
};
//in main
Poop* poop = new Poop;
Bar bar;
bar.setFoo(poop);
delete poop;
编译此代码会向我显示有关无效转换的错误消息。我应该使用什么样的铸件?
请指教。非常感谢!
答案 0 :(得分:1)
Poop
不是来自Foo
,因此您无法通过Poop*
预期Foo*
,反之亦然。 Poop
和Foo
都来自IFoo
,因此您需要更改setFoo()
以接受IFoo*
而不是Foo*
:
void setFoo(IFoo* foo){/*impl*/}