2013-01-09 147 views
1

我正在將一些C#代碼移植到C++,並遇到以下問題,請參閱下面的簡化代碼。我的文件系統類依賴於從文件系統類繼承的目錄類。這似乎適用於C#,但不適用於C++。有沒有一個簡單的伎倆來打破這一點?C++繼承循環依賴

class fileSystemItem{ 
    private: 
    Directory* parent; 
}; 

class Directory : public fileSystemItem{ 

}; 

回答

6

directory預先聲明:

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

class Directory : public FileSystemItem{ 

}; 

注意一致的大小寫。

2

問題是,在C++中,每種類型都必須聲明才能引用它。爲了解決這個問題,您可以執行所謂的前向聲明,在基類首次出現之前聲明子類。

只需在fileSystemItem的定義之前添加行class Directory;即可。另請注意,在您的示例中,您在Directory本身的定義中將Directory拼寫爲Directory(在大小寫方面),並將其用於fileSystemItem的定義中。這是行不通的,因爲標識符(就像在C#中)區分大小寫。

你造成的聲明應該是這樣的:

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

class Directory: public fileSystemItem{ 

};