0

有人可以帮我理解,为什么我可以在两个不同的编译单元中拥有相同的类而不会出现链接器错误,但在不同的编译单元中却没有相同的功能?

提前谢谢了。

4

2 回答 2

1

由于其方法(包括特殊成员,如默认 ctor 或 operator=)具有相同名称的一个定义错误,两个组合单元中的同一类可能会导致格式错误的程序。

我的特殊成员函数是隐式内联定义的,所以我们很容易得到不需要诊断的格式错误的程序。

我因此而损坏了内存;两个具有相同名称和不同内存布局的矩阵类。

于 2017-11-19T14:25:12.213 回答
1

通常,链接器主要了解函数和变量(非成员变量)。

链接器持有的关于类的信息通常与继承的实现有关。成员函数被转换为常规函数,带有额外的隐式this参数。访问成员通常只是this指针的偏移量。

但是,如果您将继承添加到您的类,或者使用 typeid 或 type_info,您可能会开始遇到许多奇怪的行为。

于 2017-11-19T13:59:25.820 回答