Я читал около One Definition Rule. В нем говорится, что:C++ путаница об одном правиле определения
если один .cpp-файл определяет struct S {int x; }; и другой .cpp-файл struct S {int y; };, поведение программы, которая связывает , вместе не определено. Обычно это разрешается с помощью именных пространств имен .
Я не понимаю, почему & как это не определено? Кто-нибудь объяснит мне фактическую причину этого? Как это разрешено с неназванными пространствами имен?
Вы объявляете одну и ту же структуру двумя разными способами, так что две разные части кода видят ее по-разному. По общему признанию, изменение только имен, но сохранение типов одинаково, вероятно, будет работать на большинстве компиляторов C++ сегодня, но spec guarentees ничего. –
Этот пример является нарушением требования о том, чтобы два типа с внешней связью и одно и то же имя были определены с использованием той же последовательности токенов (т. Е. Различия в пробелах разрешены, но типы псевдонимов, такие как typedefs, отсутствуют), а также поиск поиска те же объекты, когда токены разрешены. Этот бит о той же последовательности токенов находится в первой броне списка с маркировкой на странице, с которой вы связаны. –