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

 
Stanislav Korotky:

ИМХО, так было всегда, если размер логов небольшой (здесь где-то на форуме была инфа про размер, при котором начинается сброс кеша). Мне всегда приходилось вызывать контекстное меню, чтобы инициализировать флаш на диск.

Не совсем понимаю смысл Вашего ИМХО. Возьмите build <= 1596 (32bit) и проверьте (выводит в .log файл сразу [5-10 секунд] даже одну строку). Я проверял минуту назад

[какой кеш? какое всегда? где-то что то было о чем то!?!]

речь о вкладке Эксперты и Папке MQL5\Logs\ 

 
A100:
Если убрать template<typename T> - тоже будет компилироваться (даже со скобками)

Ну это фраза из разряда "если все убрать, то будет компилироваться".

Речь шла о причинах ошибки именно с template. Причина - некорректное поведение компилятора при разборе шаблонной конструкции в ситуации с доп. скобками. Тому, кто реализовывал шаблоны, сразу становится очевидно место проблемы и почему такое возникло.

 

Ребята приветствую стоит задача отобразить два индикатора iMACD_1 цветной, сигнальную линию и iMACD_2 в отдельном окне вот часть кода:

Сделал индексацию 

   SetIndexBuffer(0,MACDBuffer_1,INDICATOR_DATA);
   SetIndexBuffer(1,buffer_color_histogram,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(2,Signal_Line,INDICATOR_DATA);
   SetIndexBuffer(3,MACDBuffer_2,INDICATOR_DATA);

Получил указатели на индикаторы

 handle_1=iMACD(name,period,fast_ema_period,slow_ema_period,signal_period,applied_price); 
 handle_2=iMACD(name_,period_,fast_ema_period_,slow_ema_period_,signal_period_,applied_price_);

А дальше чудеса)))

По теории должно быть так чтобы отобразить индикаторы

      if(CopyBuffer(handle_1,0,0,values_to_copy,MACDBuffer_1)<0)return(0);
      if(CopyBuffer(handle_1,1,0,values_to_copy,Signal_Line)<0) return(0);
      if(CopyBuffer(handle_2,3,0,values_to_copy,MACDBuffer_2)<0) return(0);

Не работает!!!

А вот так 

      if(CopyBuffer(handle_1,0,0,values_to_copy,MACDBuffer_1)<0)return(0);
      if(CopyBuffer(handle_1,1,0,values_to_copy,Signal_Line)<0) return(0);
      if(CopyBuffer(handle_2,0,0,values_to_copy,MACDBuffer_2)<0) return(0);

работает, не могу понять какие тут проблемы с номерами буферов индикаторов. Заранее благодарен !!!

 

Ошибка при компиляции

template<typename T>
struct A {
        static int a1;
        static int a2;
};
template<typename T>
int A::a1;
template<typename T>
int A::a2;
struct B : A<int> {
        void f1() { Print( A<int>::a1 ); } //unresolved static variable 'A<int>::a1'
        void f2() { Print(         a2 ); } //unresolved static variable 'B::a2'
};

А без  template<typename T> - нормально 

 
vitrix:

Ребята приветствую стоит задача отобразить два индикатора iMACD_1 цветной, сигнальную линию и iMACD_2 в отдельном окне вот часть кода:

Сделал индексацию 

Получил указатели на индикаторы

А дальше чудеса)))

По теории должно быть так чтобы отобразить индикаторы

Не работает!!!

А вот так 

работает, не могу понять какие тут проблемы с номерами буферов индикаторов. Заранее благодарен !!!


Пожалуйста в следующий раз помните как вставлять код в сообщение (Ваше сообщение я исправил).

Второе: индикатор iMACD имеет всего два буфера: "0" - MAIN_LINE, "1" - SIGNAL_LINE. То есть получение значений индикатора будет выглядеть так:

   CopyBuffer(handle_iMACD,MAIN_LINE или SIGNAL_LINE,index - номер буфера с которого начинаем копирование,values_to_copy,buffer)
 
A100:

Ошибка при компиляции

А без  template<typename T> - нормально 

template<typename T>
struct A {
        static int a1;
        static int a2;
};
template<typename T>
int A::a1 = 0;
template<typename T>
int A::a2 = 0;
struct B : A<int> {
        void f1() { Print( A<int>::a1 ); } //unresolved static variable 'A<int>::a1'
        void f2() { Print(         a2 ); } //unresolved static variable 'B::a2'
};
 
fxsaber:

В справке сказано что: Если начальные значения не указаны, то переменные статического класса памяти принимают нулевые начальные значения. И кроме того - без template то все нормально

 
A100:

В справке сказано что: Если начальные значения не указаны, то переменные статического класса памяти принимают нулевые начальные значения

В случае с шаблонами примерно представляю откуда ноги растут, отсюда понимание, что не во всех ситуациях возможно просто добавить template-строку.

Формально, наверное, это ошибка. Хотя, думаю, что процитированный текст из документации писался задолго до появления шаблонов и несколько неточен.

 
fxsaber:

Хотя, думаю, что процитированный текст из документации писался задолго до появления шаблонов и несколько неточен.

В документации есть и прямо противоположная запись: "Статический член класса требуется явно инициализировать нужным значением". Только template на это никак не влияет - соответственно ошибка либо должна либо не должна генерироваться в обоих случаях (с template и без него) - в этом и заключается противоречие
 
MetaTrader 5 build 1619 started (MetaQuotes Software Corp.)
Microsoft Windows XP (X86 based PC), IE 08.00, Intel Core2 Duo  T7700 @ 2.40GHz, RAM: 2359 / 3581 Mb, HDD: 17612 / 27784 Mb, GMT+02:00
C:\Program Files\MetaTrader 5

MetaEditor после обновления больше не запускается, выдавая такую ошибку


1616 работал нормально, 1619 - нет.

В журнале терминале после нажатия F4

2017.07.07 12:00:30.109 Error   MetaEditor not found
2017.07.07 12:39:54.296 Error   MetaEditor not found