Ошибки, баги, вопросы - страница 1748

[Удален]  
fxsaber:
К сожалению, не понимаю проблемы по логам, когда нет кода.
Проблему я описал, да, с кодом я только в СД, там несколько файлов.
 
fSergei Vladimirov:

Просто константа "1" в вызове b.f( 1 ) интерпретируется как int. Сделайте явное приведение, и всё заработает:

b.f( (uint)1 ); 

Вопрос был следующий: а чем B::f(uint) не устроила? (неявное приведение)

Добавлю: Зачем компилятору в данном случае вообще анализировать protected\private секции, если можно обойтись и без них?

Там есть частный на первый взгляд несущественный случай и более общий. Поначалу я не придавал этому отличию от С++ значения, однако со временем пришел к выводу что это более существенно. Простейшие примеры могут не раскрывать всю суть вопроса.

 
Да понял я ваш вопрос. Есть функция с более подходящей сигнатурой, но её нельзя вызывать, потому что она защищённая. Да, поведение отличается от студии: в МКЛ, получается, более жёсткий контроль типов (в данном случае). Не знаю, стоит ли это считать ошибкой. Если контролировать тип передаваемого в функцию аргумента, то проблемы не будет.
 
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется. 
 
fxsaber:
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется. 
Видать Chrome глюкнул. Попробуйте через IE.
 
Почему компилятор сообщает об неиспользуемых переменных только в функциях? Было бы очень удобно видеть неиспользуемые переменные по всему проекту.
 
Vladimir Karputov:
Видать Chrome глюкнул. Попробуйте через IE.
Похоже, в правах ограничен. Жаль.
 
fxsaber:
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется. 
может адблок установлен? который блочит все всплывающие окна 
 
Vladislav Andruschenko:
может адблок установлен? который блочит все всплывающие окна 

Ничего не менял. Раньше все работало.

При оформлении нажимаю на эту кнопку

 

В ответ ничего, кроме этого

 

 
Sergei Vladimirov:
Да понял я ваш вопрос. Есть функция с более подходящей сигнатурой, но её нельзя вызывать, потому что она защищённая. Да, поведение отличается от студии: в МКЛ, получается, более жёсткий контроль типов (в данном случае). Не знаю, стоит ли это считать ошибкой. Если контролировать тип передаваемого в функцию аргумента, то проблемы не будет.

Контроль скорее выборочный, а значит более противоречивый, что следует отсюда

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 ); //(*)

}
Здесь в (*) по совокупности (с учетом не const B b ) больше подходит вызов A::f/*(2)*/

Но С++ всегда не анализирует базовый класс на более подходящий метод, если в производном есть просто подходящий.

А MQL - в предыдущем примере анализировал базовый класс на более подходящий метод, а в этом - не анализирует (здесь также как и С++ вызовет B::f/*(3)*/), а значит - нет единого подхода

Еще пример противоречивого контроля: C++ находит следующий код

class A { public:
        void f(  int i ) const {}
        void f( uint i )       {}
};
void OnStart()
{
        A a;
        a.f((int)0 );
}
ошибочным, а MQL - добротным