2016-11-03 39 views
0

我正在嘗試用兩個類編寫C++程序。在C++的另一個類中使用未聲明類的對象時出現錯誤

class duck { 
    Fly fls; 
    /*...*/ 
}; 

class Fly 
{ 
    /*...*/ 
}; 

在上面的代碼我想在課堂上的鴨子,但 使用Fly類的對象,因爲該類Fly是類鴨後宣佈它顯示了錯誤:

Fly does not name a type

但如果申報類Fly上課前duck 錯誤不來。如何在duck中使用Fly的對象 之後進行聲明?謝謝!

回答

0

這根本不可能。當你使用這個類型時,它必須已經存在。

唯一的例外是當你想只使用指針,類型,在這種情況下是不夠的,只是宣佈它的存在:

class Fly; 

class Duck { 
    Fly *fls; 
    ... 
}; 
... 
class Fly { 
    ... 
}; 
0

How can I use an object of class Fly in duck when it is declared afterwards?

你不能。沒門。編譯器在聲明它之前並不知道類,所以它不能編譯任何代碼。但是有好消息!在定義之前,您可以使用參考和指向類的指針。你只需要前瞻性聲明是這樣的:

class Fly; 

void foo(Fly &f_ref, const Fly& f_cref) { 
    /* Using reference and const reference here */ 
} 

class duck { 
    Fly* fls_ptr; // Pointer. 
    /*...*/ 
}; 

class Fly 
{ 
    /*...*/ 
}; 

Here是在那裏你可以使用前置聲明一個很好的概述。

+0

但我可以在java中做同樣的事情? –

+0

@AADITHYAKRISHNAN不完全一樣。在java中,你沒有明確的指針和引用的概念作爲不同的東西。你可以在'duck'類中寫上'Fly fls;'並且它會起作用。您不需要前瞻性聲明。我想,這是因爲在Java中,非原始類型的所有對象都是通過引用傳遞的。 – Sergey

相關問題