2011-10-30 29 views
4

我有一個程序,我得到了編譯後的.o文件,但是我沒有原始的.cc文件,而且我只有一箇中途完成的頭文件。頭文件具有所有方法簽名,但缺少私有變量聲明。我試圖讓這個.o文件與該項目一起工作,但在由.o文件定義的類的構造函數中出現了分段錯誤。該程序編譯。我如何得到這個工作?該程序是一項家庭作業,老師不希望我們看到.cc文件。我的老師也知道這個問題。我只是想自己弄清楚(希望在你們的幫助下:))。我以爲我剛纔和另一位老師做過這個,但沒有任何問題。有一個用於編譯程序的makefile。C++編譯沒有.cc文件的.o文件

+0

你是如何編譯你的項目,你得到什麼錯誤? – ObscureRobot

+1

標題是否缺少私人類成員或僅包含其他內容? – Dani

+0

該類是否有任何靜態方法?你可以發佈標題嗎?我認爲這是可以解決的。 – Beta

回答

4

如果您使用的是C++程序,並且頭文件包含類定義,則類定義必須與用於最初構建文件的那些完全匹配。這是One Definition Rule。如果你的教授已經從類定義中刪除了私有變量聲明,那麼你最終可能會崩潰;這是因爲你的不同.o文件將不同意這些類定義的對象的大小。

如果你的教授想隱瞞課堂的實施,應該使用p/impl pattern。如果你想使用頭文件,你必須完全刪除重載的類定義,而不是嘗試使用它們(你可以使用class Foo;中的前向定義來滿足任何接收/返回類作爲指針參數的函數) 。

+0

只有能夠將類傳遞給接受指針的函數在C++中幾乎不可能(除非使用C風格類) – Dani

+0

@Dani的確,但如果您沒有真正的聲明,那麼這是最好的選擇。 – bdonlan

+0

還有另一種方法:通過反彙編的方法找到這個類的大小,然後將它填充到這個大小。 – Dani