C ++编译没有.cc文件的.o文件

时间:2011-10-30 01:31:14

标签: c++ makefile object-files

我有一个程序,我得到了编译的.o文件,但我没有原始的.cc文件,而且我只有一个中途完成的头文件。头文件具有所有方法签名,但缺少私有变量声明。我试图让这个.o文件与项目一起工作,但在.o文件定义的类的构造函数中得到分段错误。该程序编译。我如何让它工作?该程序是一项家庭作业,教师不希望我们看到.cc文件。我的老师也知道这个问题。我只想自己解决这个问题(希望在你们的帮助下:))。我以为我之前和另一位老师做过这件事,但没有任何问题。有一个makefile用于编译程序。

1 个答案:

答案 0 :(得分:4)

如果您使用的是C ++程序,并且头文件包含类定义,则类定义必须与用于最初构建文件的类完全匹配。这是One Definition Rule。如果你的教授从类定义中删除了私有变量声明,你可能最终会崩溃;这是因为您的不同.o文件将不同意这些类定义的对象的大小。

如果您的教授想要隐藏课程的实施,他们应该使用p/impl pattern。如果要使用头文件,则必须完全删除损坏的类定义,而不是尝试使用它们(可以使用class Foo;中的转发定义来满足将类作为指针取/返的任何函数但是,参数。

相关问题