Почему включение одного заголовочного файла в два файла CPP не приводит к ошибке переопределения? - PullRequest
0 голосов
/ 11 февраля 2019

Допустим, у меня есть такой заголовочный файл:

ABC.h

class A {
    int d = 5;
    int e = 6;
};

Затем я включаю ABC.h в два исходных файла CPP.Не было бы тогда, когда компоновщик связал бы блоки компиляции вместе, я бы в итоге получил 2 определения класса A?Но тогда почему компоновщик не жалуется, когда я проверяю этот эксперимент?Я в замешательстве.

Я компилирую с использованием Visual Studio 2017.

1 Ответ

0 голосов
/ 11 февраля 2019

Существует два возможных варианта ответа на этот вопрос.

  1. Нет ошибки, потому что в противном случае было бы невозможно создать какую-либо полезную программу.Такие повторяющиеся определения классов в нескольких единицах перевода нормальны и ожидаемы в каждой программе.Таким образом, язык определен таким образом, что он просто работает.
  2. Нет ошибки, потому что это определение класса не создает глобальных символов, которые могут вызвать множественные ошибки определения.Глобальные символы обычно создаются путем определения не встроенных переменных или функций с внешней связью.В этом заголовочном файле нет таких определений.Классы и их нестатические члены не имеют связи.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...