Windows 中的 C++:头文件更改后,仅编译派生类或不编译
c++ in windows: after header file change, only compiling derived classes or not?
>更新:
感谢大家的回复。看来我有点困惑。更改是向基类添加新的成员函数。我刚刚意识到也许我确实需要重新编译依赖于导出此类的 dll 的所有内容,因为符号表中函数名称的地址发生了变化。请确认我是对还是错。
为此进行了辩论,
当某个基类中的成员函数发生更改时,我只重新编译了从该基类派生的所有类,并遇到了一些运行时错误。
在辩论的另一方,我被告知我应该重新编译所有"依赖"这个基类的类。
-
我不确定这是否正确?因为我正在构建 DLL,并且我一直理解这个动态链接的想法是不要重新编译。
-
如果这是真的,我也想知道这里到底是什么样的"依赖"?
这个问题可能问得太笼统了,如果我应该提供任何其他细节,请告诉我。真的需要学习编译和链接的东西。
谢谢!
DLL和类不能很好地协同工作。 (在 DLL 中使用类很好,当您尝试导出它们时会遇到问题。
因此,组件/对象系统(如 COM、ActiveX、CORBA)定义了一个将用户与实现分开的接口。 如果 DLL 的公共 API 仅使用指向仅具有纯虚函数的类型的指针,则它没有在 DLL 和调用方之间共享的布局。
如果尝试共享具有数据或内联函数的类,则会有紧密耦合,并且需要重新编译所有用户以进行最轻微的实现更改。
相关文章:
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 基于派生类型的编译时行为分支
- C++:编译对无关派生类、bug或特性的函数调用
- 如果所有派生类在编译时都是已知的,那么final关键字是否提供了优化
- 如何创建指向派生类的新指针,该派生类在C++编译时未知
- 从std::map派生的类不在Visual C++上编译(但在gcc和clang上编译)
- 在编译时间定义多个派生类
- 如果未实现虚函数,则大多数派生类无法编译,但如果一个基类未实现虚函数,则可以编译
- 为什么这两个涉及受保护派生类的C++示例的编译方式不同?
- 在向量中使用派生的可移动但不可压缩的会导致编译错误
- 选择要在编译时使用的派生类
- 通过迭代器调用功能无法在派生对象上编译
- OpenCV模板化代码在派生类中产生编译错误
- 在Linux上的命令行上编译QObject派生类
- 将模板方法移动到派生中断编译
- 重新编译二进制类或派生类,以便在基类中添加新方法
- 在派生类中缺少静态成员变量时强制编译错误
- Windows 中的 C++:头文件更改后,仅编译派生类或不编译
- c++Boost序列化,编译派生类时出错
- 需要重新编译派生类的基类更改