C ++继承循环依赖

时间:2013-01-09 08:27:06

标签: c++ inheritance

我正在将一些C#代码移植到C ++并遇到以下问题,请参阅下面的简化代码。我的文件系统类依赖于目录类,而目录类继承自文件系统类。这似乎适用于C#但不适用于C++。是否有一个简单的方法来打破这个?

class fileSystemItem{
    private:
    Directory* parent;
};

class Directory : public fileSystemItem{

};

2 个答案:

答案 0 :(得分:6)

directory的前瞻声明:

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

class Directory : public FileSystemItem{

};

请注意一致的大小写。

答案 1 :(得分:2)

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

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

您生成的声明应如下所示:

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

class Directory: public fileSystemItem{

};