С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
1

Пространство имен и конфликт имен

04.10.2020, 22:00. Показов 4173. Ответов 32

Author24 — интернет-сервис помощи студентам
Доброго времени суток уважаемые пользователи. В контексте решаемой задачи возникла необходимость написать функцию деления двух чисел, в ней нет абсолютно ничего особенного, да и вопрос, собственно, не к функции. Вот ее код:
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
using std::cout;
using std::cin;
using std::endl;
 
int div(int x, int y)
{
    return x/y;
}
 
...
Проблема в том что, компилятор жалуется на уже имеющуюся в функцию в файле stdlib.h со схожей сигнатурой, но отличным возвращаемым типом, хотя, как видно выше, файл stdlib.h мною не подключался и из стандартного пространства имен подключены только три функции, но, не смотря на эти ограничения, конфликт имен все еще существует. Почему такое происходит, ведь в данной ситуации не должно быть конфликта имен? Прошу Вас указать в чем моя ошибка.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.10.2020, 22:00
Ответы с готовыми решениями:

пространство имен
Здравствуйте! У меня вопрос...В си есть такая функция printf, которая аналогична функции С++...

Пространство имен
Я часто встречаю в книгах, туторах, что объявлять пространство имен в больших проектах нельзя(не...

пространство имён
Здравствуйте. Из C# я примерно представляю что такое пространство имён. Но возникает вопрос....

Пространство имен
Здравствуйте, имеется код : triangle.h #ifndef TRIANGLE_H_INCLUDED #define...

32
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:02 2
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
файл stdlib.h мною не подключался
Кроме тебя, есть еще iostream, который подключает много всего.
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:05  [ТС] 3
iostream подключает много всего если использовать using namespace std, а у меня подключены именно три функции cout, cin и endl и ничего кроме них не должно подключаться
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:11 4
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
iostream подключает много всего если использовать using namespace std, а у меня подключены именно три функции cout, cin и endl и ничего кроме них не должно подключаться
stdlib.h - сишный заголовок. Ему пофиг на твои namespace'ы.
1
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:12  [ТС] 5
И вообще подключение файла не равнозначно подключению пространства имен этого файла
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:14 6
Лучший ответ Сообщение было отмечено DrFaust1729 как решение

Решение

Цитата Сообщение от DrFaust1729 Посмотреть сообщение
И вообще подключение файла не равнозначно подключению пространства имен этого файла
Нет никакого пространства имен в сишном заголовке.
1
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:14  [ТС] 7
Вот тут можно подробнее или ссылки на источники
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:17 8
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
Вот тут можно подробнее или ссылки на источники
Про что подробнее и на источники о чем? Что конкретно не понятно? Представь, что у тебя функция div просто валяется в хидере. Все. Ты объявляешь такую же - конфликт. Пространства имен тут не участвуют никаким боком.
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:22  [ТС] 9
Благодарю за пояснение, мне было известно об отсутствии пространства имен в C, но полагал, как оказалось ошибочно, что в плюсах каждый файл относятся к конкретному пространству имен, в том числе и сишные
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:27 10
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
что в плюсах каждый файл относятся к конкретному пространству имен, в том числе и сишные
Нет, это две несвязанные сущности. Плюсовый заголовочник потом просто сишную функцию через
C++
1
using ::div;
добавит к себе в пространство std и все. Итого видимый div для глобального пространства и в std.
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.10.2020, 22:32 11
не по теме вопроса:

Цитата Сообщение от DrFaust1729 Посмотреть сообщение
вопрос, собственно, не к функции
как сказать. у Вас целочисленное деление + сама функция типа int. вряд ли это то что Вам нужно
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:46  [ТС] 12
Цитата Сообщение от Vourhey Посмотреть сообщение
Нет, это две несвязанные сущности
То, что это эти сущности не связаны, это спорное утверждение, так как пространство имен необходимо для предотвращения конфликта одинаковых имен в разных файлах

Добавлено через 5 минут
Цитата Сообщение от Yetty Посмотреть сообщение
как сказать. у Вас целочисленное деление + сама функция типа int. вряд ли это то что Вам нужно
Как уже было сказано, вопрос заключался в именно конфликте имен, а не в реализации функции, т.е. в необходимости рассмотреть функцию с сигнатурой схожей с уже имеющейся функцией.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 22:50 13
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
То, что это эти сущности не связаны, это спорное утверждение, так как пространство имен необходимо для предотвращения конфликта одинаковых имен в разных файлах
Для чего оно надо - вопрос философский. И как связано имя std с заголовочным файлом iostream? Разве я не могу поменять имя файла не убрав из него std? Или наоборот, убрать std, оставив заголовочный файл. Так о какой конкретно связи речь?
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 22:56  [ТС] 14
Цитата Сообщение от Vourhey Посмотреть сообщение
И как связано имя std с заголовочным файлом iostream
Заголовочный файл iostream включен в пространство имен std.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 23:03 15
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
Заголовочный файл iostream включен в пространство имен std.
Нет
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 23:09  [ТС] 16
Цитата Сообщение от Vourhey Посмотреть сообщение
Так о какой конкретно связи речь?
Речь о том, что при наличии файла входящего в определенное пространство имен, невозможно использовать содержимое этого файла (будь то классы, функции и т.д.) без объявления using или директивы using
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 23:13 17
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
Речь о том, что при наличии файла входящего в определенное пространство имен, невозможно использовать содержимое этого файла (будь то классы, функции и т.д.) без объявления using или директивы using
Тоже нет. И сама фраза, когда в пространство имен у тебя входит файл, она странная.
Ну да фиг с ним. Эта мистическая связь в твоей голове и привела тебя к созданию этой темы. Дальше думай, что хочешь
0
1 / 1 / 0
Регистрация: 15.02.2020
Сообщений: 23
04.10.2020, 23:28  [ТС] 18
К чему же в таком случае используется директива или объявление using?

Добавлено через 4 минуты
Цитата Сообщение от Vourhey Посмотреть сообщение
Нет
Библиотека iostream, подключаемая через заголовочный файл iostream, входит в std, если быть точнее
0
Эксперт С++
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
04.10.2020, 23:35 19
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
К чему же в таком случае используется директива или объявление using?
вопрос сформулирован как то странно.
ты не русский что ли?

не к "чему же", а "для чего".

ключевое слово using позволяет объединить имя (или пространство имен) с текущим.

например, в твоём случае:
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
using std::cout;
ты сообщил компилятору, что имя ::std::cout должно быть доступно в глобальном скоупе.

теперь необязательно писать полное (квалифицированное) имя ::std::cout,
можно писать неквалифицированное (без указания полного пути) - cout

для чего такое может быть нужно?
например, просто для удобства разработчика.

вот ты зачем написал свои
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
using std::cout;
чем руководствовался, когда написал эту строчку?
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.10.2020, 23:42 20
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
К чему же в таком случае используется директива или объявление using?
Я устал.
Цитата Сообщение от DrFaust1729 Посмотреть сообщение
Библиотека iostream
iostream - это просто имя файла. Никуда это файл не входит и ни откуда не выходит. Ни про какие "библиотеки" он тоже не в курсе.
0
04.10.2020, 23:42
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.10.2020, 23:42
Помогаю со студенческими работами здесь

Пространство имён
Добрый вечер, 1) как правильно называется часть &quot;Foo::&quot; в этой записи void Foo::hello(){} 2) и...

Пространство имен
Зачем пространство имен в программировании я чет не понимаю? У мну в учебнике отак написано....

Пространство имён!
Как лучше указывать пространство имён? using namespace std вначале? или std::? вроде бы проще...

Пространство имён
Прочитал сейчас раздел про пространство имён, но так всё равно и не понял, почему лучше не...

Пространство имен
Подскажите, пожалуйста. Если я создам своё пространство имен и в нем создам функцию, например,...

пространство имен
Один практикующий программист сказал мне, что пространство именusing namespace std; нежелательно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
UserScript для подсветки кнопок языков программировани­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форм быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru