c++继承循环依赖

C++ inheritance loop dependency

本文关键字:依赖 循环 继承 c++      更新时间:2023-10-16

我正在将一些c#代码移植到c++中,并遇到以下问题,请参阅下面的简化代码。我的文件系统类依赖于目录类,而目录类又继承了文件系统类。这似乎在C#中有效,但在C++中无效。有没有一个简单的技巧可以打破这个?

class fileSystemItem{
    private:
    Directory* parent;
};
class Directory : public fileSystemItem{
};

directory的前向声明:

class Directory;
class FileSystemItem{
    private:
    Directory* parent;
};
class Directory : public FileSystemItem{
};

注意大小写一致。

问题是,在c++中,每个类型都必须在引用它之前声明。为了解决这个问题,可以执行所谓的前向声明,在子类首次出现在基类之前声明它。

只需在fileSystemItem的定义之前添加class Directory;行。还要注意,在您的示例中,在Directory本身的定义及其在fileSystemItem的定义中的使用中,您拼写Directory的方式不同(就大小写而言)。这不起作用,因为标识符(就像c#中一样)是区分大小写的。

你的结果声明应该是这样的:

class Directory;
class fileSystemItem{
    private:
    Directory* parent;
};
class Directory: public fileSystemItem{
};