Ошибки, баги, вопросы - страница 3604 1...359735983599360036013602360336043605360636073608360936103611...3776 Новый комментарий Aleksey Vyazmikin 2024.12.28 16:14 #36031 Maxim Kuznetsov #: если функция/метод нигде не вызывается, то "по мнению компилятора" и хрен с ней :-) детальный анализ по поводу ошибков производится не будет возможно по { } компилятор сориентировался в графе вызовов и проигнорил fxsaber #: Потому что все правильно. Это третий входной параметр функции iOpen (слева). А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать? fxsaber 2024.12.28 16:40 #36032 Aleksey Vyazmikin #: А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать? Логическое выражение. bool A = 1; bool B = iOpen(Symbol(),PERIOD_M1,0)<Price_RSI_Center_0; bool C = A && B; // iOpen(Symbol(),Signal_TF_RSI,1 && iOpen(Symbol(),PERIOD_M1,0)<Price_RSI_Center_0) iOpen(Symbol(),Signal_TF_RSI,C) Vladislav Boyko 2024.12.28 17:09 #36033 fxsaber #: Можно возразить, что это касается и простых типов (int->long и т.д.). Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных. void OnStart() { int a = 1; f(a); // void f(int) f((long)a); // void f(long) } void f(int) { Print(__FUNCSIG__); } void f(long) { Print(__FUNCSIG__); } fxsaber 2024.12.28 17:49 #36034 Vladislav Boyko #: Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных. Согласен. Aleksey Vyazmikin 2024.12.28 18:11 #36035 fxsaber #: Логическое выражение. Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть. fxsaber 2024.12.28 18:34 #36036 Aleksey Vyazmikin #: Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть. Не должно быть. void f( int ) {} void OnStart() { f(true); // OK } fxsaber 2024.12.28 18:35 #36037 Еще случай, когда без разыменования указателя не обойтись. class A { public: void operator =( const A* ) { Print(__FUNCSIG__); } }; void OnStart() { A* a = new A; *a = a; // void A::operator=(const A*) delete a; } Artyom Trishkin 2025.01.03 05:24 #36038 Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам". Aleksandr Slavskii 2025.01.04 09:09 #36039 Методы для работы с массивами. В справка описаны методы, которых нет. Зато есть методы не описанные в справке. При попытке скомпилировать вот это: void OnStart() { double array[]; int size = 3; array.Reserve(size); } Закрывается метаэдитор ))) Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак. Вполне возможно, что я его как то не правильно применил, но мы об этом никогда не узнаем, так как этот метод не описан в справке. Эх. ЗЫ. Я хотел написать array.Resize(size), ну как в справке написано int array.Resize(const int range_sizes[], const int reserve); но в метаэдиторе ресайза не нашлось. Любые вопросы новичков по Импорт фунций из DLL. 5 EA на одном Alexey Viktorov 2025.01.04 10:25 #36040 Aleksandr Slavskii #: Методы для работы с массивами. В справка описаны методы, которых нет. Зато есть методы не описанные в справке. При попытке скомпилировать вот это: Закрывается метаэдитор ))) Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак. Вполне возможно, что я его как то не правильно применил, но мы об этом никогда не узнаем, так как этот метод не описан в справке. Эх. ЗЫ. Я хотел написать array.Resize(size), ну как в справке написано int array.Resize(const int range_sizes[], const int reserve); но в метаэдиторе ресайза не нашлось. Ну, чисто логически, если входной параметр const bool Reserve(const int size); значит переменную нельзя. Я попробовал бы поставить перед переменной array.Reserve(const size); но абсолютно неуверен, что прокатит. 1...359735983599360036013602360336043605360636073608360936103611...3776 Новый комментарий
если функция/метод нигде не вызывается, то "по мнению компилятора" и хрен с ней :-) детальный анализ по поводу ошибков производится не будет
возможно по { } компилятор сориентировался в графе вызовов и проигнорил
Потому что все правильно.
Это третий входной параметр функции iOpen (слева).
А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать?
А разве может быть параметр вообще иметь такой вид (A && B) и как это интерпретировать?
Логическое выражение.
Можно возразить, что это касается и простых типов (int->long и т.д.).
Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных.
Для простых типов проблем нет, можно явно приводить аргументы к указанному в нужной сигнатуре типу данных.
Согласен.
Логическое выражение.
Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть.
Понял, спасибо. Значит предупреждение о несовпадении типа данных должно быть.
Не должно быть.
Методы для работы с массивами. В справка описаны методы, которых нет. Зато есть методы не описанные в справке.
При попытке скомпилировать вот это:
Закрывается метаэдитор )))
Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак.
Вполне возможно, что я его как то не правильно применил, но мы об этом никогда не узнаем, так как этот метод не описан в справке. Эх.
ЗЫ. Я хотел написать array.Resize(size), ну как в справке написано int array.Resize(const int range_sizes[], const int reserve);
но в метаэдиторе ресайза не нашлось.
Методы для работы с массивами. В справка описаны методы, которых нет. Зато есть методы не описанные в справке.
При попытке скомпилировать вот это:
Закрывается метаэдитор )))
Если вместо size подставить просто 3, то всё норм компилируется, а вот переменную не вывозит никак.
Вполне возможно, что я его как то не правильно применил, но мы об этом никогда не узнаем, так как этот метод не описан в справке. Эх.
ЗЫ. Я хотел написать array.Resize(size), ну как в справке написано int array.Resize(const int range_sizes[], const int reserve);
но в метаэдиторе ресайза не нашлось.
Ну, чисто логически, если входной параметр const
значит переменную нельзя. Я попробовал бы поставить перед переменной
array.Reserve(const size);но абсолютно неуверен, что прокатит.