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

 

Требуется доработка шаблонов (вынос реализации за class A {})

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T>
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //нормально
template<typename T>
template<typename T2>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } //error: 'T' - declaration without type

Не получается реализовать A::f3 вне class A {}.

Вы скажете - но внутри то class A {} - можно. Да, можно... например f2(), но неудобство заключается в том, что цель - вынести громозкие функции за class A {}. А главное то что A::f1() то можно вынести за class A {} и все работает, а  A::f3() - нельзя - компилятор генерирует ошибку, а, A::f1() от A::f3() принципиально ничем не отличаются.

 
Не, это жесть какая-то, кстати по идее typedef решит проблему
 
A100:

Требуется доработка шаблонов (вынос реализации за class A {})

Не получается реализовать A::f3 вне class A {}.

Вы скажете - но внутри то class A {} - можно. Да, можно... например f2(), но неудобство заключается в том, что цель - вынести громозкие функции за class A {}. А главное то что A::f1() то можно вынести за class A {} и все работает, а  A::f3() - нельзя - компилятор генерирует ошибку, а, A::f1() от A::f3() принципиально ничем не отличаются.

Вот так норм компилится.

template<typename T>
class A { public:
template<typename T2>
        void f1( T2 t2 );
template<typename T2,typename T>
        void f2( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); }
template<typename T2,typename T>
        void f3( T2 t2, T tt );
        T t;
};
template<typename T2>
void A::f1( T2 t2 )       { Print( __FUNCSIG__, " ", typename( this.t ) ); } //?????????
template<typename T2,typename T>
void A::f3( T2 t2, T tt ) { Print( __FUNCSIG__, " ", typename( this.t ) ); } //error: 'T' - declaration without type

 

 

А f1 и f3 у Вас немного отличались 

 
Andrey Barinov:

Вот так норм компилится.

Не норм - просто компилятор решил, что нет OnStart  - нет проблемы

добавьте

void OnStart()
{
        A<long> a;
}
 
Файлы:
Test114.mq5  3 kb
 

Если изменить пару строк, то ошибка меняется на: tree optimization error

А изначально (до упрощения) ошибка была: code generation error

И все заканчивается на этом - а раньше то все работало нормально.

Файлы:
Test115.mq5  3 kb
 
A100:

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

Архив назовите "проверка на вшивость". Наверняка, есть такие тестовые варианты для различных видов компиляторов.

 
Ошибка компиляции: code generation error
Файлы:
Test116.mq5  2 kb
 


График оптимизации перестаёт отрисовываться из за некорректного вычислении значения критерия.  Прошу пофиксить, т.к. визуально наблюдать ход оптимизации на графике весьма удобно. 

Проявляется только на критерии Balance + max RF. // По крайней мере в моей (пока небольшой) практике.

// Ломается только график,  оптимизация успешно продолжается.

-----------  UPD

Проявляется только на критерии Balance + max RF.

Был неправ. 


 

Разное поведение & и GetPointer

class A {};
class B {
        A *f() const { return GetPointer( a ); } //не генерирует ошибки
        A *g() const { return &a; }              //ошибка: 'return' - cannot convert from const pointer to nonconst pointer
        A a;
};
Причина обращения: