Почему глобальный константный объект имеет уникальную копию в каждой единице перевода и как этого избежать?C++

Программы на C++. Форум разработчиков
Ответить
Гость
 Почему глобальный константный объект имеет уникальную копию в каждой единице перевода и как этого избежать?

Сообщение Гость »


Когда я объявил и инициализировал константный объект.

// ConstClass.h класс ConstClass { }; const ConstClass g_Const; И этот заголовок есть в двух файлах cpp.

// Unit1.cpp #include "ConstClass.h" #include "stdio.h" недействительный PrintInUnit1( ) { printf( "g_Const в Unit1 равен %d.\r\n", &g_Const ); } и

// Unit2.cpp #include "ConstClass.h" #include "stdio.h" недействительный PrintInUnit2( ) { printf( "g_Const в Unit2 равна %d.\r\n", &g_Const ); } Когда я создавал решение, не было ошибок ссылки, что вы получите, если g_Const — неконстантный фундаментальный тип!

А PrintInUnit1() и PrintInUnit2() показывают, что в двух модулях компиляции есть два независимых объекта "g_Const" с разными адресами. Почему?

==============

Я знаю, как это исправить. (используйте ключевое слово extern для объявления и определите его в одном файле cpp.)

Интересно, почему в этом примере я не получил ошибку redfined link?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»