我正在将一些C#代码移植到C ++并遇到以下问题,请参阅下面的简化代码。我的文件系统类依赖于目录类,而目录类继承自文件系统类。这似乎适用于C#
但不适用于C++
。是否有一个简单的方法来打破这个?
class fileSystemItem{
private:
Directory* parent;
};
class Directory : public fileSystemItem{
};
答案 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{
};