我有一個程序,我得到了編譯後的.o文件,但是我沒有原始的.cc文件,而且我只有一箇中途完成的頭文件。頭文件具有所有方法簽名,但缺少私有變量聲明。我試圖讓這個.o文件與該項目一起工作,但在由.o文件定義的類的構造函數中出現了分段錯誤。該程序編譯。我如何得到這個工作?該程序是一項家庭作業,老師不希望我們看到.cc文件。我的老師也知道這個問題。我只是想自己弄清楚(希望在你們的幫助下:))。我以爲我剛纔和另一位老師做過這個,但沒有任何問題。有一個用於編譯程序的makefile。C++編譯沒有.cc文件的.o文件
4
A
回答
4
如果您使用的是C++程序,並且頭文件包含類定義,則類定義必須與用於最初構建文件的那些完全匹配。這是One Definition Rule。如果你的教授已經從類定義中刪除了私有變量聲明,那麼你最終可能會崩潰;這是因爲你的不同.o文件將不同意這些類定義的對象的大小。
如果你的教授想隱瞞課堂的實施,應該使用p/impl pattern。如果你想使用頭文件,你必須完全刪除重載的類定義,而不是嘗試使用它們(你可以使用class Foo;
中的前向定義來滿足任何接收/返回類作爲指針參數的函數) 。
相關問題
- 1. Makefile:從.c文件編譯.o
- 2. 編譯打嗝在C++和.o文件
- 3. 編譯沒有_cplusplus的C文件def
- 4. 編譯Objective-C的文件到目標文件(.o)
- 5. 修改makefile編譯.CC和.cpp文件
- 6. Grunt:SCSS文件沒有編譯
- 7. C編程文件I/O
- 8. Make file:將所有.cpp文件編譯爲.o文件
- 9. crt1.o沒有這樣的文件linux x64上的C++編譯錯誤
- 10. C++編譯文件
- 11. 編譯C文件
- 12. 編譯* .cc文件時出現Gcc編譯錯誤
- 13. Maven沒有編譯類,在war文件中沒有類文件
- 14. 使.o文件在Linux內核編譯
- 15. 編譯Mach-o手臂目標文件
- 16. 無法在ubuntu |中編譯cc,gcc沒有這樣的文件或目錄
- 17. Figwheel沒有編譯所有文件
- 18. 較少的文件沒有編譯
- 19. Appengine沒有編譯我的.jspx文件
- 20. Makefile:自動編譯所有c文件,將.o文件保存在單獨的文件夾中
- 21. 用C++編譯器編譯C99文件
- 22. GNU編譯使所有的.cpp文件.O和包括.h文件
- 23. 在osx中將對象c(.m)文件編譯爲目標文件(.o)
- 24. Jekyll sass文件沒有編譯
- 25. LESS文件沒有得到編譯
- 26. grunt-contrib-sass沒有編譯css文件
- 27. django-pipeline沒有編譯sass文件
- 28. Gulp Sass沒有編譯CSS文件
- 29. application.css.scss文件沒有預編譯
- 30. 編譯文件失敗,`MV:沒有match.`
你是如何編譯你的項目,你得到什麼錯誤? – ObscureRobot
標題是否缺少私人類成員或僅包含其他內容? – Dani
該類是否有任何靜態方法?你可以發佈標題嗎?我認爲這是可以解決的。 – Beta