|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.03.2018, 22:26 | #1 |
Регистрация: 30.01.2014
Сообщений: 3
|
Линковка и пространство имен.
файл main.cpp содержит следующий код:
Код:
Код:
Код:
Почему происходит ошибка при сборке проекта? Как определить переменную в пространстве имен bob не в main.cpp файле? Сохранит ли значение переменной age если к ней обратиться из другого файла? |
23.03.2018, 03:56 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
23.03.2018, 04:02 | #3 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,760
|
Какой стандарт доступен? До С++17 мутите с extern, после можно в h файле определить с inline.
|
23.03.2018, 09:51 | #4 | |
Регистрация: 30.01.2014
Сообщений: 3
|
Цитата:
причем тут extern? 1) создал пространство имен bob 2) добавляю туда новую переменную. 3) Пытаюсь получить доступ к этой новой переменной из другого файла. |
|
23.03.2018, 10:12 | #5 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
Вот в этот момент и должен быть extern. Именно потому, что переменная уже определена в другом файле.
Общая схема такая: в одном из .cpp переменная определяется (без extern), а в соответствуещем .h - объявляется уже с extern. |
24.03.2018, 16:27 | #6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
24.03.2018, 16:30 | #7 |
Форумчанин
Регистрация: 24.01.2011
Сообщений: 774
|
Суть в том, что всё, что написано в файлах, подключенных в #include, копируется в место #include.
Соответственно, как раз для того, чтобы не было дублей переменной, и надо объявлять через extern. Вообще, компилятор, получается, просто копирует текст include в cpp файлы, которые компилируются полностью раздельно. Соответственно, то, что с неймспейсом произошло в file.cpp, main.cpp не знает. И переменную надо описать в файле h, чтобы обращаться. Код:
И да, из того, что файл h — это просто копируемый текст, следует, что можно было написать, и это должно работать: Код:
a.k.a. Angelicos Phosphoros
Мой сайт Последний раз редактировалось New man; 24.03.2018 в 16:37. |
24.03.2018, 17:21 | #8 |
Регистрация: 24.03.2018
Сообщений: 5
|
|
24.03.2018, 17:23 | #9 |
Регистрация: 24.03.2018
Сообщений: 5
|
Ошибка на строке using bob::age; все верно. Это вам не Java.
Надо using bob; |
24.03.2018, 17:35 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
А причем тут Java?
Можно ж и в С++ using std::vector; и т.п. Но да, для переменной как хотел автор нельзя.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Пространство имен | RAFA91 | Общие вопросы .NET | 23 | 13.11.2015 18:40 |
Пространство имен XML | Oleg_SS | Общие вопросы Delphi | 4 | 19.08.2014 10:36 |
Добавить пространство имен в стандартное расширение | Jeckor | C# (си шарп) | 1 | 14.06.2014 18:19 |
Как подключить пространство имен InteropServices.Automation | Diskretor | WPF, UWP, WinRT, XAML | 1 | 27.01.2013 19:47 |
Линковка... | GHOST_Kasper | Работа с сетью в Delphi | 13 | 21.11.2007 16:06 |