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

 
Nikolai Semko #:

нет, по ссылке хочет видеть только динамический

Проверил - точно...

 
anrei2002 #:
Подскажите почему появилось много стрелок в индикаторе? Где вылезла ошибка?

В стрелочных индикаторах первым делом нужно заполнять рисуемые буферы пустым значением (обычно EMPTY_VALUE, либо 0 - от настроек буфера зависит), и только потом производить все расчёты

 
Nikolai Semko # :

нет, по ссылке хочет видеть только динамический

А без ссылки массив не передать

Не хочется создавать динамический дубликат большого массива только лишь для передачи в класс или функцию

Бред конечно

Дело имею с ресурсной переменной, поэтому никак не уйти от массива фиксированного размера.

В чем проблема ?

 class ACLASS
  {
public :
                     ACLASS( double &arr[])
     {
       bool isDynamic = ArrayIsDynamic (arr);
       printf ( "%s arr is %s" , __FUNCTION__ ,isDynamic ? "Dynamic" : "Static" );
     }
  };

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   double array1[ 50 ];
   printf ( "%s array1 is %s" , __FUNCTION__ , ArrayIsDynamic (array1) ? "Dynamic" : "Static" );
   ACLASS obj1(array1);
//---
   double array2[];
   printf ( "%s array2 is %s" , __FUNCTION__ , ArrayIsDynamic (array2) ? "Dynamic" : "Static" );
   ACLASS obj2(array2);

  }
 
Nikolai Semko #:

нет, по ссылке хочет видеть только динамический

А без ссылки массив не передать

Не хочется создавать динамический дубликат большого массива только лишь для передачи в класс или функцию

Бред конечно

Дело имею с ресурсной переменной, поэтому никак не уйти от массива фиксированного размера.

Ну вот так получается:

struct SArrayStatic { long  array[2]; };
  
class CTest
  {
public:
                     CTest(SArrayStatic &data);
                    ~CTest(void);
  };
Хотя вон выше Алан пример привёл, что передаются любые массивы. В параметрах конструктора только указывается динамичекский, а передаются любые...
 
Здравствуйте 
У меня произошёл баг в приложении мт5 при открытии сделки AUDCHF точка открытия сделки меняется в файлах есть все докозательство 
Прошу помогите мне
 
Nikolai Semko #:
Подскажите пожалуйста, существует ли способ передать в конструктор массив фиксированного размера?
Nikolai Semko #:

нет, по ссылке хочет видеть только динамический

А без ссылки массив не передать

Не хочется создавать динамический дубликат большого массива только лишь для передачи в класс или функцию

Бред конечно

Дело имею с ресурсной переменной, поэтому никак не уйти от массива фиксированного размера.

Так он же вроде создаётся автоматически в любом случае. Из документации:

При явном указании всех значимых размерностей массива компилятор заранее распределяет необходимый размер памяти. Такой массив называется статическим. Тем не менее, компилятор дополнительно распределяет память под объект динамического массива, который (объект) связан с заранее распределенным статическим буфером (областью памяти для хранения массива).

Создание объекта динамического массива обусловлено возможной необходимостью передавать данный статический массив в качестве параметра в какую-либо функцию.

 
Alain Verleyen #:

В чем проблема ?

Спасибо большое Alain
я понял в чем проблема. 
Оказывается ресурсные переменные  имеют формат const

#resource "//Images//PNG.png" as uchar array2[]
class ACLASS
  {
public :
                     ACLASS(uchar &arr[])
     {
       bool isDynamic = ArrayIsDynamic (arr);
       printf ( "%s arr is %s" , __FUNCTION__ ,isDynamic ? "Dynamic" : "Static" );
     }
  };

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+---------
---------------------------------------------------------+
void OnStart ()
  {
   uchar const array1[5] = {1,2,3,4,5};
   printf ( "%s array1 is %s" , __FUNCTION__ , ArrayIsDynamic (array1) ? "Dynamic" : "Static" );
   ACLASS obj1(array1);
//---
   printf ( "%s array2 is %s" , __FUNCTION__ , ArrayIsDynamic (array2) ? "Dynamic" : "Static" );
   ACLASS obj2(array2);
  }


результат:

'PNG.png' as 'const uchar array2[226933]'       PNG.png 1       1
'array1' - constant variable cannot be passed as reference      TestPNG.mq5     30      16
   ACLASS::ACLASS(uchar&[])     TestPNG.mq5     16      22
'array2' - constant variable cannot be passed as reference      TestPNG.mq5     33      16
   ACLASS::ACLASS(uchar&[])     TestPNG.mq5     16      22

В этом случае действительно не получается передать массив как параметр.

Я просто хочу наконец сделать библиотеку работы с PNG файлами и опубликовать ее в CodeBase

 
Nikolai Semko #:

Спасибо большое Alain
я понял в чем проблема. 
Оказывается ресурсные переменные  имеют формат const


результат:

В этом случае действительно не получается передать массив как параметр.

Я просто хочу наконец сделать библиотеку работы с PNG файлами и опубликовать ее в CodeBase

Так работает:

struct SArrayStatic { const long  array[2]; };
  
class CTest
  {
public:
                     CTest(SArrayStatic &data);
                    ~CTest(void);
  };
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
Artyom Trishkin #:

Так работает:

Спасибо Артем!
А если не известен размер массива?
В моем случае ( ресурсная переменная из файла png) именно так