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

 
Ilyas:

Уберите кавычки из тела макроса

Чтобы преобразовать параметр макроса в строку следует использовать #:

## используется для склеивания токенов
Спасибо!
 
Slawa:

Нашли и исправили. Спасибо за сообщение.

Пока нет исправленного билда, этот баг можно обойти, тестируя на дневном (а не недельном) таймфрейме. При этом все недельки формируются правильно

Спасибо! Понял Вас и буду ждать исправленного билда.
 
По каким дням недели обновляется кодобаза?
 

Неоднозначность:

class A {};
class B {
        virtual B *f() { return NULL; }
        virtual A *g() { return NULL; }
};
class C : public B {
        virtual C *f() { return NULL; } //нормально
        virtual C *g() { return NULL; } //Error: overriding virtual function with different return type
};

В одном случае можно перегрузить метод иным типом возврата, а в другом - нельзя

 

Ошибка при выполнении

//Script3.mq5
class A {};
class B : public A {
public:
        B( int ii ) : i( ii ) {}
        void f( A *a ) { i = g( a ); }
        int g(  A& a ) { return ((B *)&a).i; }
        int i;
};
void OnStart()
{
        B a = 1,
          b = 2;
        a.f( &b );
        Print( "OK:", a.i );
}

Результат:

2016.08.16 10:22:45.244 Script3 (GBPUSD,M15) invalid pointer access in 'Script3.mq5' (11,27)

Ошибка плавающая. Не возникает, если то же самое переписать по другому

 
A100:

Ошибка при выполнении

Результат:

2016.08.16 10:22:45.244 Script3 (GBPUSD,M15) invalid pointer access in 'Script3.mq5' (11,27)

Ошибка плавающая. Не возникает, если то же самое переписать по другому

Спасибо, исправлено.
 
A100:

Неоднозначность:

В одном случае можно перегрузить метод иным типом возврата, а в другом - нельзя

Это сделано нами осознанно, так как никаких проблем при наличии прямого наследования нет.
 

Кто какими способами решает сейчас проблему, когда шаблонный метод в шаблонном классе почему-то не находится компилятором и возникает ошибка:

no one of overloads can be applied to the function call

?

Сишные компиляторы в таких случаях пишут конкретно какие типы подставлялись и каких функций с каким прототипом не нашлось, поэтому более или менее понятно в чем проблема, а здесь - конкретики нет.

[Удален]  
Ilyas:
Это сделано нами осознанно, так как никаких проблем при наличии прямого наследования нет.

Хотелось бы увидеть точное правило: в каких случаях я имею право переопределить виртуальную функцию с другим типом возвращаемого значения?

 Или это перегрузка?

 
Koldun Zloy:

Хотелось бы увидеть точное правило: в каких случаях я имею право переопределить виртуальную функцию с другим типом возвращаемого значения?

Только один единственный случай, при возврате указателя на объект класса, когда возвращаемый тип переопределённой функции наследуется (является первым родителем при множественном наследовании, пока не поддерживается в MQL) от типа, который возвращает переопределяемая.