我正在将一些 C# 代码移植到 C++ 并遇到以下问题,请参见下面的简化代码。我的文件系统类依赖于从文件系统类继承的目录类。这似乎适用于C#
但不适用于C++
. 有没有一个简单的技巧来打破这个?
class fileSystemItem{
private:
Directory* parent;
};
class Directory : public fileSystemItem{
};
我正在将一些 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++ 中,必须先声明每种类型,然后才能引用它。为了解决这个问题,您可以执行所谓的前向声明,在子类第一次出现在基类中之前声明它。
只需class Directory;
在fileSystemItem
. 另请注意,在您的示例中,您Directory
在Directory
其自身的定义及其在fileSystemItem
. 这不起作用,因为标识符(就像在 C# 中一样)区分大小写。
您生成的声明应如下所示:
class Directory;
class fileSystemItem{
private:
Directory* parent;
};
class Directory: public fileSystemItem{
};