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

 
Sergey Gridnev #:
И как он помогает создать переменную с таким же именем как у компилируемого файла? 

StringSplit с разделителем '.' и получением [0] элемента из массива даст вам имя которое уже преобразуете в переменную

fxsaber #:
Возможно ли для такой конструкции получить название файла без расширения?

Сейчас вместо Var подставляется Test6.mq5, а хотелось бы - Test6.


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


пример скрипта:

string NameFile(string A)
  {
   string sA=A;
   StringReplace(sA,".mq5","");
   return sA;
  }
#define MACRO(A) NameFile(A)
#define Var MACRO(__FILE__)

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CLASS
  {
public:
   string            Name;
                     CLASS()
     {
      Name=Var;
     }
  };
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---

   CLASS test;
   Print(test.Name);

  }

 

 
Alexandr Gavrilin #:
StringSplit с разделителем '.' и получением [0] элемента из массива даст вам имя которое уже преобразуете в переменную
Вы читать умеете?
Он хочет, чтобы переменная именовалась так, как именуется файл. Предположу, что это надо для использования одного макроса в нескольких включаемых файлах без коллизий.
 
Sergey Gridnev #:

Это же ошибка, ведь, название файла не содержит кавычек.

__FILE__, __FUNCTION__, __FUNCSIG__ - это строковые константы

 
В одном случае есть Warning, а в другом - нет:
void OnStart()
{
    Print( LONG_MIN == -LONG_MIN ); //(1)//нормально
    Print(  INT_MIN ==  -INT_MIN ); //(2)//Warning: overflow in constant expression, 2147483648 cannot be represented as 'int' and will be truncated to -2147483648
}

А какая принципиальная разница?

 
Sergey Gridnev #:
Вы читать умеете?
Он хочет, чтобы переменная именовалась так, как именуется файл. Предположу, что это надо для использования одного макроса в нескольких включаемых файлах без коллизий.

Признаться, я сам не правильно прочитал.

Сижу ломаю голову, как решить задачу.

Была мысль, имя файла задавать без расширения. Но тогда компиляция не производится. При нажатии "Компиляция" ничего не происходит, от слова "совсем".

Из разумных мыслей такая:

//#define MACRO(A) A 
//#define Var MACRO(__FILE__)
#define Var Test6

class CLASS
{
  int Var;
};

Все ровно же потом компилировать? Т.е., не выделять "имя_файла" из __FILE__, а задать его первой строкой, и дальше использовать.

 
Sergey Gridnev #:
Вы читать умеете?
Он хочет, чтобы переменная именовалась так, как именуется файл. Предположу, что это надо для использования одного макроса в нескольких включаемых файлах без коллизий.

Умею и автор вопроса написал его так:  Возможно ли для такой конструкции получить название файла без расширения?

 

Matrix/Vector sort seems not to work?

From the ref (https://www.mql5.com/en/docs/matrix/matrix_manipulations/matrix_sort):


Кажется, матричная/векторная сортировка не работает?

Из ссылки (https://www.mql5.com/en/docs/matrix/matrix_manipulations/matrix_sort):

 //+------------------------------------------------------------------+
 //| Sort function                                                    |
 //+------------------------------------------------------------------+
 int MyDoubleComparator( double x1, double x2, int sort_mode= 0 )
  {
   int res=x1<x2 ? - 1 : (x1>x2 ? 1 : 0 );
   return (sort_mode== 0 ? res : -res);
  }
 //+------------------------------------------------------------------+
 //| Script start function                                            |
 //+------------------------------------------------------------------+
 void OnStart ()
  {
   //--- fill the vector 
   vector v( 100 );
   //--- sort ascending 
   v.Sort(MyDoubleComparator);   // an additional parameter with the default value '0' is used here 
   Print (v);
   // sort descending 
   v.Sort(MyDoubleComparator, 1 ); // here the additional parameter '1' is explicitly specified by the user 
   Print (v);
  }

вызывает здесь (Win 10, MT5 b. 4153) ошибку:/ causes here (Win 10, MT5 b. 4153) the error:

'test_MatrixSDort.mq5'                     test_MatrixSDort.mq5     1    1
'Sort' is not a member of 'vector' type    test_MatrixSDort.mq5    24    6
expression has no effect                   test_MatrixSDort.mq5    24    4
'Sort' is not a member of 'vector' type    test_MatrixSDort.mq5    27    6
expression has no effect                   test_MatrixSDort.mq5    27    4

Same if I try it with a matrix :(
То же самое, если я попробую сделать это с матрицей :(

Даже редактор не знает m.Sort для автоматического завершения и предложения параметров :(

PS:
Why does the BSearch exists only for Arrays bur not for Matrices?
Почему BSearch существует только для массивов, но не для матриц?

Documentation on MQL5: Matrix and Vector Methods / Manipulations / Sort
Documentation on MQL5: Matrix and Vector Methods / Manipulations / Sort
  • www.mql5.com
Sort - Manipulations - Matrix and Vector Methods - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 

Что то опять форматирование слетело. Нижняя строчка поста "в карман / нарушение \ ответить" была справа, стала слева. Стало хуже читать на компе. вин7 хром.


 
Valeriy Yastremskiy #:

Что то опять форматирование слетело. Нижняя строчка поста "в карман / нарушение \ ответить" была справа, стала слева. Стало хуже читать на компе. вин7 хром.


Я думал, что только у меня ...
 

Выделяю 10 файлов .mq5, нажимаю открыть, а открывается в редакторе хорошо если 2-3.

У кого-то проблема такая тоже наблюдается\воспроизхводится?

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