реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Конфликт имен, функция и медод класса
toweroff
сообщение Jul 11 2013, 18:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Есть такая Sleep() и есть метод класса такой же

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

Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 11 2013, 18:29
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



::Sleep()
?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 11 2013, 19:15
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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


а при этом разве как раз не метод класса будет вызываться?
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 11 2013, 19:34
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Нет, оператор "::" без имени слева - это обращение к глобальному идентификатору. Если слева будет имя класса, то обращение к статическому полю класса.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Jul 11 2013, 20:26
Сообщение #5


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(toweroff @ Jul 11 2013, 23:15) *
...разве ...не метод класса будет вызываться?


OFF/2:
для чёткости в коде заведите нэймспэйсы. и явно указывайте их. тогда разночтения уменьшатся.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 11 2013, 20:55
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



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

Мне нужна та, которая в winbase.h и с параметром unsigned long dwMilliseconds и namespace там не определено
Go to the top of the page
 
+Quote Post
Flexz
сообщение Jul 12 2013, 06:26
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);
Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 13 2013, 14:20
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(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 мне нужна только эта функция, так что, думаю, все будет в порядке. В любом случае, теперь понятно, на что обращать внимание

спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016