我可以使用類的前向聲明爲了將它的定義和實現稍後在程序中使用(類似於函數的做法)嗎?類的前向聲明
(我需要將一個程序的多個源文件連接到一個文件中,並且我希望將這些類的定義和實現放在該文件的末尾,以使main
位於該文件的頂部。)
我可以使用類的前向聲明爲了將它的定義和實現稍後在程序中使用(類似於函數的做法)嗎?類的前向聲明
(我需要將一個程序的多個源文件連接到一個文件中,並且我希望將這些類的定義和實現放在該文件的末尾,以使main
位於該文件的頂部。)
是的,你可以在一定程度上。
你必須認識到,C++編譯器是相當愚蠢的,不會提前閱讀。這就是爲什麼你必須使用函數原型(其他一些原因)。 現在,編譯器解決一個函數並不難。它只是查看函數的返回類型和函數參數的類型,並且只是假設函數在那裏,而不知道函數內部的實際內容,因爲它在那個點上最終並不重要。
但是,類的內容確實很重要(例如,編譯器需要知道類的大小)。但記住關於不讀前面的位?當你轉發定義一個類時,編譯器不知道它裏面的內容,因此缺少大量有關它的信息。需要預留多少空間?
因此,您可以轉發定義類,但不能將它們用作值類型。你可以用它做的唯一事情(在它已被具體聲明之前)是指向它的指針(並且用它作爲函數返回類型和模板參數,作爲指針由 @ Cheersandhth.-Alf指出)。
如果您需要使用的東西不是指針,則應該使用標頭(如果您想了解更多信息,請參閱this)。
沒有一個類定義前面的地方,你不能使用任何類成員,也可以創建任何實例,但你可以
使用T *和T &類型,
使用T代表正式返回類型和參數聲明(是的甚至值),
使用T作爲模板參數,
和可能更多,但以上是我立即想到的。
所以,如果這就是你需要的一切,那麼你就會選擇前進宣言。
然而,所有的前鋒宣佈購買你的草圖情況添加的工作,保持在兩個地相同的代碼,所以很難看到它&hellip點;
哦,我只記得,有一個與前瞻性聲明不完整的類型,即使用delete p
其中p
是指向不完全類型相關聯的一個特別討厭的未定義行爲。這要求析構函數是微不足道的。如果編譯器是好的,那麼它會發出警告,但不要指望它。
總之,我只想把main
這些代碼,它屬於哪裏,避免所有問題的非常年底。
你試過了嗎?你有沒有編譯錯誤?編寫一個簡單的例子不用花一分多鐘就可以試試。 – abelenky
或者,您可以將'main'放在底部並忽略問題......無論如何,答案是類的前向聲明的使用有限。 –
@abelenky是的,來自MS VS 1的errCode>錯誤C2079:'student_list'使用未定義的類'Student_list' – MTVS