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

 
fxsaber:

"Предок" видеть protected/private-поля и не должен.

А public-поля: должен/не должен?

Комбинатор:

Если добавить

struct B;

Не влияет 
 
A100:

А public: должен/не должен?

public static-поле - обязан.
 
fxsaber:
public static-поле - обязан.
Обобщая: Базовый класс не видит не static поля производного. Одновременно базовый класс не видит protected static производного, но видит public static. Вы сами придумали это правило?
 
A100:
Обобщая: Базовый класс не видит не static поля производного. Одновременно базовый класс не видит protected static производного, но видит public static. Вы сами придумали это правило?

Мне сложно сказать, откуда сделаны такие обобщения. Сам такое никак не имел в виду.

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

Базовый класс никогда не видит protected/private (static - без разницы) поля/методы производного (public-наследование).

Производный класс (public-наследование) никогда не видит private поля/методы базового, но всегда видит - protected/public.

 
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.

Причина обращения: