Ошибки, баги, вопросы - страница 2271
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
MQL5 выдает
Т.е. нет сигнатуры класса внутри функции. Когда-нибудь будет поддерживаться.
Если устаревшие C++ компиляторы не поддерживают это то они в исходном коде выдают ошибку уже на первой строке (1). Поэтому изначально вопрос так и ставился: Почему в одном случае ошибка, а в другом - нормально?
Ожидалось в обоих случаях одинаковое поведение: или ошибка или без ошибок. И ошибка не в отсутствии поддержки как таковой, а в неодинаковом поведении при прочих равных условиях (как и в этом примере)
А если класс глобальный, то C++ какую из строк выдает?
void f<::A>( ::A& )
void f<A>( A& )
Второй вариант
Если устаревшие C++ компиляторы не поддерживают это то они в исходном коде выдают ошибку уже на первой строке (1). Поэтому изначально вопрос так и ставился: Почему в одном случае ошибка, а в другом - нормально?
Ожидалось в обоих случаях одинаковое поведение: или ошибка или без ошибок. И ошибка не в отсутствии поддержки как таковой, а в неодинаковом поведении при прочих равных условиях (как и в этом примере)
Так объяснимо же. Компилятор идет сверху вниз по коду, формируя на ходу соответствующие сигнатуры. Первую сигнатуру создал без проблем. Доходит до второй - а такая уже есть. Вот и ошибка на второй строке.
Если объявлять классы (3)(4) вне функций - ошибок не возникает. Если объявить внутри функции - возникает.
заменить на
то и внутри функции ошибок не возникает... а какая принципиальная разница?
Так объяснимо же. Компилятор идет сверху вниз по коду, формируя на ходу соответствующие сигнатуры. Первую сигнатуру создал без проблем. Доходит до второй - а такая уже есть. Вот и ошибка на второй строке.
А так почему в MQL компилируется без ошибок?
Результат: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
Почему тут сигнатуры создаются без помех?
А так почему в MQL компилируется без ошибок?
Результат: MQL C++
void f<A>() void f<g1::A>()
void f<A>() void f<g2::A>()
Почему тут сигнатуры создаются без помех?
Одна только создается. Более того, в f Вы не сможете использовать T. В общем, ситуация очевидная для меня.
Одна только создается. Более того, в f Вы не сможете использовать T.
Более того, в f Вы не сможете использовать T. В общем, ситуация очевидная для меня.
Более того, нарушил Ваш запрет на использование T в f
Как видите компилируется без ошибок, а то что результат абсурдный - не важно главное что все "объяснимо"
Какой сакральный смысл в этом коде,зачем его вообще впихнули в стандартную библиотеку?
Теперь невозможно юзать функции закрытия позиций или ордеров из стандартной библиотеки в ОнДеинит , например при REASON_REMOVE