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

 
fxsaber:

Любой класс видит public static поля/методы любого другого класса.

В итоге вопрос сводится к следующему: Правильно ли что в MQL в базовом классе доступны public static поля/методы производного?
 
A100:
В итоге вопрос сводится к следующему: Правильно ли что в MQL в базовом классе доступны public static поля/методы производного?

Это правильно не только для случая базового/производного, но и для любых классов вообще.

 
fxsaber:

Это правильно не только для случая базового/производного, но и для любых классов вообще.

Вопрос возник не на пустом месте

#ifdef __cplusplus
struct B;
struct A {
        int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
а значит требует детальной проверки
 
fxsaber:

Любой класс видит public static поля/методы любого другого класса.

... в т.ч. базового. Отсюда возникает следующее противоречие в MQL

struct A {
        static int i;
};
int A::i;
struct B : private A {};
struct C : B {
        C() { Print( A::i ); } //error: 'i' - private member access error
};
С++ без ошибок
 
A100:

В С++ по умолчанию в структурах члены публичные, в mql приватные, как и в классах.

Да, я был неправ, форвард декларации в С++ не хватает, надо определение

 
A100:

... в т.ч. базового. Отсюда возникает следующее противоречие в MQL

С++ без ошибок

Да, это баг private-наследования MQL.

 

Ошибка при компиляции

template<typename T1, typename T2>
void f( T2 t )
{
        Print( typename( T1 ), ":", typename( T2 ), ":", t );
}
void OnStart()
{
        char ch = 5;
        f<int>( ch ); //(1) //error: 'f' - wrong template parameters count
}

компилируется запись

         f<int,char>( ch ); //(2)
которая содержит избыточную информацию и кроме того неоднозначность если ch не char. Более того в макросе информация о типе ch в общем случае недоступна (зависит от контекста)
 
A100:

Ошибка при компиляции

А разве в плюсах так можно?

 
Комбинатор:

А разве в плюсах так можно?

С++ компилирует оба варианта, но (1) представляется более правильным и интуитивно понятным. Во (2) нужно держать в уме еще и типы, что неудобно и вместо упрощения - получаем излишнее усложнение которое отчетливо видно, если в <> несколько typename 
 

не исчезают оповещения, все перепробовал, все прочитано, на сайте мкл оповещений нет только в терминале..