Перейти к содержанию
    

Конфликт имен

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет, оператор "::" без имени слева - это обращение к глобальному идентификатору. Если слева будет имя класса, то обращение к статическому полю класса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...разве ...не метод класса будет вызываться?

 

OFF/2:

для чёткости в коде заведите нэймспэйсы. и явно указывайте их. тогда разночтения уменьшатся.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, похоже, всех ввел в заблуждение... :(

эта Sleep() - которая мне нужна - определена в winbase.h

После того, как я подключаю TIdHTTP, Sleep() уже берется из Idglobal.hpp (по крайней мере, мне так cbuilder сообщает)

У одной параметр unsigned int ATime, у второй - unsigned long dwMilliseconds

 

Мне нужна та, которая в winbase.h и с параметром unsigned long dwMilliseconds и namespace там не определено

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);

Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

т.е. второй Sleep тоже глобальный, без классов и неймспейсов? И оно компилится нормально? Значит unsigned long и unsigned int у вас разные типы. Попробуйте явно приводить параметр к нужному типу, т.е. как то так - Sleep((unsigned long)1);

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

 

Вообще стоит сделать обертку (например, вынести winbase.h в отдельный cpp-файл, функции которого будут просто вызывать соответствующие API-шные функции из winbase), что бы исключить случайное использование одной функции вместо другой. Иначе такой конфликт рано или поздно приведет к неочевидному багу.

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

 

спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...