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

 

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

#define MACRO( x )      ((x) + 2)
struct A {
        A( int, int ) {}
};
template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a( MACRO(1), 2 ); //error: '(' - declaration without type
А без   template<typename T> - нормально... а какая разница?
 
A100:

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

А без   template<typename T> - нормально... а какая разница?

Дело в доп. скобках макроса

struct A {
        A(int) {}
};

template<typename T>
struct B {
        static A a;
};
template<typename T>
A B::a((0));

Если их убрать, будет компилироваться.

 
fxsaber:

Дело в доп. скобках макроса

Если их убрать, будет компилироваться.

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

Оперативно не обновляются .log файлы %AppData%\MetaQuotes\Terminal\...\MQL5\Logs\YYYYMMDD.log

Обновление происходит только: после перезагрузки терминала или при выборе меню Просмотр. Если с начала суток не перезагружать и не выбирать Просмотр - то соответствующий файл будет пустой

Раньше то все работало (и даже открытый в MetaEditor YYYYMMDD.log файл сам обновлялся через несколько секунд после вывода строк во вкладке Эксперты) и не нужно было совершать лишних неочевидных действий

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

 
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'
};
Причина обращения: