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

Alexey Kozitsyn:
В mql нужно проверять код ошибки явно (во время выполнения), а во время компиляции итак выскочит предупреждение, при возможной ошибке в приведении типов.
Так вот и хочется частично отключить выборочно, вывод ошибок во время компиляции.
[Удален]
Anton Ohmat:
Так вот и хочется частично отключить выборочно, вывод ошибок во время компиляции.
Отключать ничего не нужно. Ошибок не возникнет если правильно приводить типы друг к другу.
Anton Ohmat:
Так вот и хочется частично отключить выборочно, вывод ошибок во время компиляции.
Чтобы не видеть ошибок и предупреждений при компиляции, нужно их просто испоавить в коде. Не обманывайте себя, вы же с деньгами хотите работать.

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

struct A {
        int f() { return B::i; } //error: 'i' - protected member access error
};
struct B : A {
protected: //(*) или например private:
        static int i;
};
int B::i;
В то же время без строки protected: (*) - компилируется без ошибок

Ожидалось: одинаковое поведение как со строкой protected: (*) - так и без нее

Дополнительно: C++ не компилирует оба случая

A100:

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

В то же время без строки protected: (*) - компилируется без ошибок

Ожидалось: одинаковое поведение как со строкой protected: (*) - так и без нее 

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

Если хочется B::f() определять в A::f(), то придется что-то придумать в данном случае.
A100:

Дополнительно: C++ не компилирует оба случая

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

struct B; 

в начале кода, один из двух случаев по идее должен компилироваться. может mql компилятор такой умный что сам недостающую форвард декларацию добавляет?

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.