1

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

class fileSystemItem{
    private:
    Directory* parent;
};

class Directory : public fileSystemItem{

};
4

2 回答 2

6

的前向声明directory

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

class Directory : public FileSystemItem{

};

注意一致的大小写。

于 2013-01-09T08:28:06.027 回答
2

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

只需class Directory;fileSystemItem. 另请注意,在您的示例中,您DirectoryDirectory其自身的定义及其在fileSystemItem. 这不起作用,因为标识符(就像在 C# 中一样)区分大小写。

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

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

class Directory: public fileSystemItem{

};
于 2013-01-09T08:34:47.503 回答