Может ли кто-нибудь помочь мне понять, почему у меня может быть один и тот же класс в двух разных блоках компиляции без ошибок компоновщика, но не одна и та же функция в разных блоках компиляции?
Спасибо заранее.
Один и тот же класс в двух единицах компиляции, вероятно, приведет к некорректной программе из-за ошибок определения одного из ее методов (включая специальные члены, такие как ctor по умолчанию или оператор =), имеющих одно и то же имя.
Мои специальные функции-члены определены неявно встроенными, поэтому мы получаем плохо сформированные программы без необходимости диагностики.
Я испортил память из-за этого; два матричных класса с одинаковым именем и разным расположением памяти.
Обычно компоновщик в основном осведомлен о функциях и переменных (переменные, не являющиеся членами).
Информация, которую компоновщик хранит в отношении классов, обычно связана с реализацией наследования. Функции-члены переводятся в обычные функции с дополнительными неявными this
параметр. Доступ к членам обычно просто смещение в this
указатель.
Однако, если вы добавите наследование к своим классам или используете typeid или type_info, вы можете столкнуться со многими видами странного поведения.