我正在將一些C#代碼移植到C++,並遇到以下問題,請參閱下面的簡化代碼。我的文件系統類依賴於從文件系統類繼承的目錄類。這似乎適用於C#
,但不適用於C++
。有沒有一個簡單的伎倆來打破這一點?C++繼承循環依賴
class fileSystemItem{
private:
Directory* parent;
};
class Directory : public fileSystemItem{
};
我正在將一些C#代碼移植到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
本身的定義中將Directory
拼寫爲Directory
(在大小寫方面),並將其用於fileSystemItem
的定義中。這是行不通的,因爲標識符(就像在C#中)區分大小寫。
你造成的聲明應該是這樣的:
class Directory;
class fileSystemItem{
private:
Directory* parent;
};
class Directory: public fileSystemItem{
};