Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
#1

Область видимости, пространства имен - C++

07.05.2013, 23:08. Просмотров 1388. Ответов 21
Метки нет (Все метки)

имею макрос
C++
1
#define max(a,b)    (((a) > (b)) ? (a) : (b))
он определен в Windows.h, который мне нужен в проекте...

также мне нужна это строчка в коде
C++
1
cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
вопрос...каким с чего компилятор решил, что мне нужно использовать макрофункцию?..и как это вылечить?..)

пишет ошибку, что нехватает параметров
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Область видимости, пространства имен (C++):

Не возникает ли коллизия имен, если использовать два пространства имен, и в каждом из них будут одноименные? - C++
Вот например namespace nms1 { int gh; } namespace nms2 { int gh;

Создание пространства имен - C++
Всем доброго времени суток !!! Не могу понять назначение создания пространств имен. В книге автор привел следующий код программы....

Использование пространства имен - C++
Написать программу, использующую описанные типы данных: инициализация переменных (ввод пользователя), выполнение действий (в зависимости от...

Использование пространства имен - C++
Заголовочный файл с осн функциями двунаправленного списка.Нужно построить на его основе стек и очередь с обобщенным интерфейсом т.е...

Пространства имен в Эклипс - C++
Добрый день. Переношу свой проект из IAR на Eclipse+Yagarto(gcc 4.6.2) Подскажите, из-за чего в hpp модулях проекта может не...

Столкнулся с ошибкой пространства имен - C++
Столкнулся с такой ошибкой: error C2871: System: пространство имен с таким именем не существует. Стоит четвертый Framework. В нем проблема?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
08.05.2013, 13:49 #16
ForEveR, я писал о том, что в коде где используется
C
1
#define max(a,b)    (((a) > (b)) ? (a) : (b))
вместо макроса использовать template и для задания автора темы такое решение куда больше будет решением в стиле С++ чем оставить в коде макрос, вот и всё

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
#define max(a, b) ((a) < (b)) ? (b) : (a)
template<typename T>
T max(const T& f, const T& s)
{
* *return T();
}
- я говорил о таком решении
C++
1
2
3
4
5
6
//#define max(a, b) ((a) < (b)) ? (b) : (a)
template<typename T>
T max(const T& f, const T& s)
{
* *return T();
}
опять же ForEveR, я уже говорил , что тот кто захочет - тот мою мысль поймёт, кто не захочет - тот всегда будет о чём-то со мной спорить. Посмотри внимательно мои линки на кодпад.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 13:53 #17
-=ЮрА=-, Ты влез в вопрос действительно не понимая его сути... Человек спрашивал как сделать возможным использование
C++
1
std::numeric_limits<T>::max()
, т.к. ему вылетала ошибка из-за макроса, предопределенного в другом заголовочном файле (НЕ автора), на что ему посоветовали, либо
C++
1
#define NO_MINMAX
, либо
C++
1
#undef max
, это является единственными корректными ответами на вопрос автора.
1
-=ЮрА=-
Заблокирован
Автор FAQ
08.05.2013, 14:06 #18
Цитата Сообщение от ForEveR Посмотреть сообщение
.к. ему вылетала ошибка из-за макроса, предопределенного в другом заголовочном файле (НЕ автора), на что ему посоветовали, либо
- во первых Forever чтобы включить макрос max нужно было где то в коде подключить сам windows.h, об этом говорилось. В своём посте 6 я показал что использование макроса несёт за собой весьма тяжёлые последствия для того что под ним (даже для того что идёт в namespace и для
Цитата Сообщение от ForEveR Посмотреть сообщение
std::numeric_limits<T>::max()
в конкретно данном случае)
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
С макросом не пойдёт : http://codepad.org/4aK4qOOK
поэтому ниже я предложил изъять макрос к чертям
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
С шаблоном покатит : http://codepad.org/uZvN5HvK
Опять же вернёмся к словам автора темы
Цитата Сообщение от NeonLost Посмотреть сообщение
он определен в Windows.h, который мне нужен в проекте...
- т.е он подключал windows.h скорее всего из за макроса (я по крайней мере сделал такой вывод), посчитав такой порядок вещей нерациональным я привёл template. Теперь вопрос - я не писал на китайском, давал линки, неужели так трудно было разобрать коды, сравнить и понять мной написанное?

Не по теме:

ЗЫ ForEveR, не ведись на поводу своих соратников это по меньшей мере некрасиво!

0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
08.05.2013, 14:25 #19
-=ЮрА=-, Конечно трудно, ведь автор просто спрашивает как сделать так, чтобы работало. Он не говорил, что он включил файл для макроса. Он просто сказал, что ему нужен этот файл. Не стоит строить догадки, без какой-либо информации по данному поводу. В данном случае, раз файл нужен - остается 4 варианта, #define, #undef, изъять (закомментировать в данном конкретном случае) макрос, включить действительно нужный файл, а не Windows.h (если нужно что-то глубже). Таким образом, ты косвенным образом предложил залезть в хедер VS и закомментировать макрос там - мне нужно тебе говорить, что это в разы некорректнее остальных 3 способов?

Хотя, возможно я неверно понял вопрос, потому что задан он довольно странно, с одной стороны можно предположить, что автору нужен файл Windows.h в проекте и тогда твой ответ некорректен, с другой стороны можно предположить, что автору нужен именно макрос max, для чего он и включил Windows.h, в данном случае твой ответ корректен.
2
-=ЮрА=-
Заблокирован
Автор FAQ
08.05.2013, 14:59 #20
Цитата Сообщение от ForEveR Посмотреть сообщение
Хотя, возможно я неверно понял вопрос, потому что задан он довольно странно, с одной стороны можно предположить, что автору нужен файл Windows.h в проекте и тогда твой ответ некорректен, с другой стороны можно предположить, что автору нужен именно макрос max, для чего он и включил Windows.h, в данном случае твой ответ корректен.
- да с этим соглашусь.

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
Таким образом, ты косвенным образом предложил залезть в хедер VS и закомментировать макрос там - мне нужно тебе говорить, что это в разы некорректнее остальных 3 способов?
- нет, я всего лишь полагал не использовать define либо закоментировать его определение если он идёт, (пусть это не афишировалось но неявно мной подразумевалось - кустарных методов модификации системных хедеров я не проповедую, при желании можешь посомтреть все мои посты на форуме - модификации никогда не приводил)
0
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
08.05.2013, 20:40  [ТС] #21
воу воу воу...
сорри, за некоректный вопрос...Windows.h мне нужен был, чтоб создать окно с текстбоксом, из консольконо приложения...если честно, я не понял зачем они этот макрос туда запихнули...)
0
-=ЮрА=-
Заблокирован
Автор FAQ
08.05.2013, 21:26 #22
NeonLost, спасибо за ясность, тогда да в коде необходимо "отменить" define любым из описанных выше способов, будь то undef либо через #define NOMINMAX
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 21:26
Привет! Вот еще темы с ответами:

Отличия пространства имен от структуры - C++
Есть ли разница между пространством имен и структурой? По-моему почти одно и то же

Пространства имен и перегрузка функций - C++
описание: есть библиотека. Пространство имен namespace1, в нем есть несколько перегруженных функций func(). // header.h #ifndef...

Неименованные пространства имен - разобрать код - C++
Всем доброго дня !!! При изучении темы неименованные пространства имен столкнулся с проблемой. Автор привел такой код. В...

Как избавиться от явного указания пространства имен - C++
Есть класс, который нужно вынести в другой файл. Соответственно что делаю: 1. Описание класса в *.h файл 2. Реализацию методов...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.05.2013, 21:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru