Ошибки, баги, вопросы - страница 1749
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Оформил тиковый индикатор в кодобазу. Но прикрепить исходники не получается - нажимаю "Прикрепить файлы", надпись исчезает, но интерфейса для выбора файлов не появляется.
может адблок установлен? который блочит все всплывающие окна
Ничего не менял. Раньше все работало.
При оформлении нажимаю на эту кнопку
В ответ ничего, кроме этого
Да понял я ваш вопрос. Есть функция с более подходящей сигнатурой, но её нельзя вызывать, потому что она защищённая. Да, поведение отличается от студии: в МКЛ, получается, более жёсткий контроль типов (в данном случае). Не знаю, стоит ли это считать ошибкой. Если контролировать тип передаваемого в функцию аргумента, то проблемы не будет.
Контроль скорее выборочный, а значит более противоречивый, что следует отсюда
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 );
}
Контроль скорее выборочный, а значит более противоречивый, что следует отсюда
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 );
}
у вас компилятор под C++ какой? у меня gcc и все проходит без ошибок
void f( int i ) const {} //1
void f( unsigned int i ) {} //2
};
void OnStart()
{
A a;
a.f((int)0 );
}
(1) или (2). Сейчас вставлю сообщение компилятора
Вот это действительно - строгий контроль: один метод больше подходит по сигнатуре, другой - по константности
Вот это действительно - строгий контроль: один метод больше подходит по сигнатуре, другой - по константности
И не ясно, зачем такое писать.
Замените f -> operator[], возьмите свой недавний пример - подумайте как сделать [] и слева и справа. Добавьте константности по вкусу - далее заверните в шаблон и у Вас получится нечто похожее
Если сделать const - рассматривается вариант без если
Если однозначности быть не может, то следует выдать как минимум предупреждение
Замените f -> operator[], возьмите свой недавний пример - подумайте как сделать [] и слева и справа. Добавьте константности по вкусу - далее заверните в шаблон и у Вас получится нечто похожее
О каком примере речь? Могли бы Вы привести не исходник, а конечную запись, которая должна работать?
В итоге должно получиться что то вроде этого
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}
В итоге должно получиться что то вроде этого
{
A<int> a;
int b = a[ 0 ];
a[ 0 ] = a[ 1 ];
a[ 1 ] = b;
}