Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Конфликт имен
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
toweroff
Есть такая Sleep() и есть метод класса такой же

компилятор не понимает , что ему вызывать sm.gif А нужна именно внешняя функция. Как к ней дорваться?

Flexz
::Sleep()
?
toweroff
Цитата(Flexz @ Jul 11 2013, 22:29) *
::Sleep()
?


а при этом разве как раз не метод класса будет вызываться?
Flexz
Нет, оператор "::" без имени слева - это обращение к глобальному идентификатору. Если слева будет имя класса, то обращение к статическому полю класса.
kolobok0
Цитата(toweroff @ Jul 11 2013, 23:15) *
...разве ...не метод класса будет вызываться?


OFF/2:
для чёткости в коде заведите нэймспэйсы. и явно указывайте их. тогда разночтения уменьшатся.
toweroff
Я, похоже, всех ввел в заблуждение... sad.gif
эта Sleep() - которая мне нужна - определена в winbase.h
После того, как я подключаю TIdHTTP, Sleep() уже берется из Idglobal.hpp (по крайней мере, мне так cbuilder сообщает)
У одной параметр unsigned int ATime, у второй - unsigned long dwMilliseconds

Мне нужна та, которая в winbase.h и с параметром unsigned long dwMilliseconds и namespace там не определено
Flexz
т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);
Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.
toweroff
Цитата(Flexz @ Jul 12 2013, 10:26) *
т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);

ага, ясно. Думаю, должно сработать

Цитата(Flexz @ Jul 12 2013, 10:26) *
Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.

да, может. Но из всего winbase мне нужна только эта функция, так что, думаю, все будет в порядке. В любом случае, теперь понятно, на что обращать внимание

спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.