在c ++中强制转换多重继承

Zed*_*Zed 1 c++

我有一个关于多重继承演员的问题.我有3个基类

class ReadFile;
class WriteFile
class SharedObject; // this class is basically a mutex
Run Code Online (Sandbox Code Playgroud)

基于我构建的那些课程:

class ReadWriteFile : public ReadFile, public WriteFile
{ ... };

class ReadWriteSharedFile : public ReadWriteFile , public SharedObject
{ ... };

class ReadFileShared : public ReadFile, public SharedObject
{ ... };
Run Code Online (Sandbox Code Playgroud)

在我的代码的某些方面,我有一个ReadWriteSharedFile指针,我想把它作为指向ReadFileShared的指针

ReadFileShared * l_data = dynamic_cast<ReadFileShared * >(m_data); // m_data is a ReadWriteSharedFile 
Run Code Online (Sandbox Code Playgroud)

它编译但在执行时,强制转换"失败"并且l_data为NULL

但是,我想要达到的目标听起来对我来说是合法的.是吗?我究竟做错了什么.谢谢

Max*_*kin 7

ReadFileShared并且ReadWriteSharedFile是不相关的类,尽管它们继承了一些相同的基类.因此,您不能将引用/指针转换为彼此.

你的功能也许应该使用接口ReadFileWriteFile,而不是需要特定的实现它们.这是接口背后的主要思想.有关更多详细信息,请参阅C++接口类 - 简介.