Ошибки, баги, вопросы - страница 1748
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
К сожалению, не понимаю проблемы по логам, когда нет кода.
Просто константа "1" в вызове b.f( 1 ) интерпретируется как int. Сделайте явное приведение, и всё заработает:
b.f( (uint)1 );
Вопрос был следующий: а чем B::f(uint) не устроила? (неявное приведение)
Добавлю: Зачем компилятору в данном случае вообще анализировать protected\private секции, если можно обойтись и без них?
Там есть частный на первый взгляд несущественный случай и более общий. Поначалу я не придавал этому отличию от С++ значения, однако со временем пришел к выводу что это более существенно. Простейшие примеры могут не раскрывать всю суть вопроса.
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется.
Видать Chrome глюкнул. Попробуйте через IE.
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется.
может адблок установлен? который блочит все всплывающие окна
Ничего не менял. Раньше все работало.
При оформлении нажимаю на эту кнопку
В ответ ничего, кроме этого
Да понял я ваш вопрос. Есть функция с более подходящей сигнатурой, но её нельзя вызывать, потому что она защищённая. Да, поведение отличается от студии: в МКЛ, получается, более жёсткий контроль типов (в данном случае). Не знаю, стоит ли это считать ошибкой. Если контролировать тип передаваемого в функцию аргумента, то проблемы не будет.
Контроль скорее выборочный, а значит более противоречивый, что следует отсюда
class A {
}public:
void f( int ) const {} /*(1)*/
void f( int ) {} /*(2)*/
};
class B : public A {
public:
void f( int ) const {} /*(3)*/
};
void OnStart()
{
B b; //не const B
b.f( 0 ); //(*)
Но С++ всегда не анализирует базовый класс на более подходящий метод, если в производном есть просто подходящий.
А MQL - в предыдущем примере анализировал базовый класс на более подходящий метод, а в этом - не анализирует (здесь также как и С++ вызовет B::f/*(3)*/), а значит - нет единого подхода
Еще пример противоречивого контроля: C++ находит следующий код
void f( int i ) const {}
void f( uint i ) {}
};
void OnStart()
{
A a;
a.f((int)0 );
}